2013-03-03 15 views
5

Próbuję przechwycić onKeyUp po naciśnięciu Enter bez użycia jQuery.onKeyUp bez jQuery?

Mój obecny kod jest:

$('#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 = ''; 
     } 
    }); 

Jak można to zrobić w regularnych JavaScriptu zamiast?

+0

'onkeyup' jest zdarzeniem' Javascript' –

+1

Zmień jedyną jquery, którą musisz udokumentować.getElementById ("chatboxtextarea"). Onkeyup = function() {} – mplungjan

+0

Jak wyglądałby ten kod? – Alosyius

Odpowiedz

3

prostu:

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 = ''; 
    } 
}; 

edit:

Alternatywnie można nazwać coś jak poniżej, aby dodać zdarzenie; przekazując obiekt elementu, typ zdarzenia (bez „on”), funkcja, aby zadzwonić i czy używać przechwytywania, po prostu wykorzystują różne metody przeglądarki:

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; 
    } 
}; 

tj:

addEvent(document.getElementById('chatboxtextarea'), 'keyup', 
    function(e) { 
    e = e || window.event; 
    ... 
    }, false); 
+0

Działa we wszystkich przeglądarkach z wyjątkiem IE 7, jakieś pomysły? IE7 mówi, że e jest puste lub nie jest obiektem. – Alosyius

+0

@Alosyius potrzebuje window.event dla ie7 itd. –

+0

Nie jestem pewien, czy śledzę:/Czy istnieje sposób na wykonanie powyższych czynności we wszystkich przeglądarkach? – Alosyius

0

jQuery wykonuje wewnętrznie skomplikowany kod, który trudno byłoby naśladować po prostu. Jeśli chcesz tylko powiązać to samo wydarzenie z danym identyfikatorem, nie jest tak źle.

Aby wybrać element:

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

Do mocowania zdarzenie:

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

Dla IE8-, należy użyć .attachEvent, ale nie jest to dokładny analogowego. W przypadku starszych przeglądarek użyj atrybutu .onkeyup.