5

jQueryを使用せずにEnterキーを押したときにonKeyUpをキャプチャしようとしています。

私の現在のコードは次のとおりです。

$('#chatboxtextarea').on('keyup', function (e) {
        var msg = document.getElementById('chatboxtextarea').value;
        if (msg.replace(/\r/g, '\\\\r').replace(/\n/g, '') != "" && e.keyCode == 13) {
            var textarea = document.getElementById('chatboxtextarea');
            textarea.value = '';

            .....code to send.....


        } else if (msg.replace(/\r/g, '\\\\r').replace(/\n/g, '') == '') {
            var textarea = document.getElementById('chatboxtextarea');
            textarea.value = '';
        }
    });

代わりに、通常の JavaScript でこれを行うにはどうすればよいでしょうか?

4

2 に答える 2

3

単に:

document.getElementById('chatboxtextarea').onkeyup = function (e) {
    e = e || window.event;
    var textarea = this;
    var msg = textarea.value;
    if (msg.replace(/\r/g, '\\\\r').replace(/\n/g, '') != "" && e.keyCode == 13) {
        textarea.value = '';

        .....code to send.....

    } else if (msg.replace(/\r/g, '\\\\r').replace(/\n/g, '') == '') {
        textarea.value = '';
    }
};

編集:

または、次のように呼び出してイベントを追加することもできます。さまざまなブラウザメソッドを利用するためだけに、要素オブジェクト、イベントタイプ(「on」なし)、呼び出す関数、およびキャプチャを使用するかどうかを渡します。

function addEvent(elm, evType, fn, useCapture) {
  if (elm.addEventListener) {
    elm.addEventListener(evType, fn, useCapture);
  }
  else if (elm.attachEvent) {
    elm.attachEvent('on' + evType, fn);
  }
  else {
    elm['on' + evType] = fn;
  }
};

すなわち:

addEvent(document.getElementById('chatboxtextarea'), 'keyup', 
  function(e) {
    e = e || window.event;
    ...
  }, false);
于 2013-03-03T18:17:28.257 に答える
0

jQuery は内部で多くの複雑なコードを実行するため、単純に模倣するのは困難です。問題の ID に同じイベントをバインドすることだけが必要な場合は、それほど悪くはありません。

要素を選択する場合:

document.getElementById('chatboxtextarea')
document.querySelector('#chatboxtextarea')
document.querySelectorAll('#chatboxtextarea')[0]

イベントを添付する場合:

.addEventListener('keyup', function (e) {

IE8- の場合、 を使用する必要があります.attachEventが、正確なアナログではありません。古いブラウザーの場合は、.onkeyup属性を使用します。

于 2013-03-03T18:27:33.570 に答える