3

私は最近いくつかの JS を行っていて、この愚かなエラーが発生しました。リターンキーを使用e.keyCodeしてチェックすることはできますkeyCode == 13が、(上矢印) をチェックしようとすると38、決して起動しません。何か助けてください。

HTML:

<input type="text" id="TxtMessage" 
       placeholder="Message" onKeyPress="SendMsg(event)" >

Javascript:

function SendMsg(e)
{
var message = document.getElementById("TxtMessage");

if(e.keyCode ==13)
{
    var json = {"message": message.value};
    json = JSON.stringify(json);
    ws.send(json);
    PreviousMessage = message.value;
    message.value = "";
    message.focus();
}
else if(e.keyCode == 38) 
{ 
    message.value = PreviousMessage;
}
}

編集: onKeyPress を onKeyDown に変更することで修正されました...奇妙な。

4

3 に答える 3

2

次の行を置き換えます。

if(e.keyCode !=13) return;
if(e.keyCode == 38) { message.value = PreviousMessage; return;  }

これについて:

var charCode = typeof e.which == "number" ? e.which : e.keyCode;

if(charCode == 38) { message.value = PreviousMessage; return;  }
if(charCode !=13) return;

更新:正しい解決策は、キーダウンまたはキーアップイベントを使用して矢印キーをキャッチすることであるため
、上記のコードはキープレス イベントで使用しても機能しませんでした。拡張された回答については、こちらを参照してください https://stackoverflow.com/a/2218915/352672 また、keyup イベントを使用した作業中の jsfiddle も参照してください。

于 2013-02-03T16:22:56.397 に答える
1

スワップ

if(e.keyCode !=13) return; 

そして次の行。

于 2013-02-03T16:09:47.977 に答える
1

これを使って:

function SendMsg(e)
{
    var message = document.getElementById("TxtMessage");

    // Load previous message
    if(e.keyCode == 38) { message.value = PreviousMessage; return;  }


    // Send message on ENTER
    if(e.keyCode == 13) {
        if(message.value !=null && message.value !="")
        {
            var json = {"message": message.value};
            json = JSON.stringify(json);
            ws.send(json);
            PreviousMessage = message.value;
            message.value = "";
            message.focus();
        }
        else
        {
            CAlert("Message cannot be empty.", false, true);    
        }
    }
}

更新keyDown が機能し、keyPress が機能しないのはなぜですか?

keydown と keyup はどのキーが押されたかを示すコードを提供し、keypress はどの文字が入力されたかを示すことに注意してください。たとえば、小文字の "a" は、keydown と keyup では 65 と報告されますが、keypress では 97 と報告されます。大文字の「A」は、すべてのイベントで 65 として報告されます。この違いにより、矢印キーなどの特殊なキーストロークをキャッチする場合は、.keydown() または .keyup() を選択することをお勧めします。

つまり、keyPress矢印キーではイベントは発生しません。

于 2013-02-03T16:24:47.847 に答える