Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Применение библиотек > JQuery, keypress в браузере google chrome


Автор: FlakeMusic 16.8.2010, 11:55
Здравствуйте.

Код

$("#commentForm").keypress(function (e) {
          alert(e.which);
        });


Если нажать Enter+Ctrl, то выводит 10 вместо 13. Во всех др. браузерах выводит 13. Из-за этого в хроме не работает условие:
Код

if (e.which == 13 && e.ctrlKey) {
    // ...
}


Почему такое происходит?

Автор: Amphiluke 16.8.2010, 12:51
Попробуйте вместо keypress сделать keyup и вместо e.which использовать e.keyCode

Автор: ksnk 16.8.2010, 12:51
а патамушта! 

Движек WebKit писался изначально для Мака, а у него перевод строки - \r , а не \n, как в юниксе или \n\r, как в винде. Что добавляет программистам еще немного радости при кодировании  smile 

Нужно проверять и то и это.

Автор: FlakeMusic 16.8.2010, 13:15
т.е. такая проверка верна?
Код

if ((e.which == 13 || e.which == 10) && e.ctrlKey == true ) {
             $(submitButton).click();
         }

Автор: ksnk 16.8.2010, 14:39
Хотя это довольно странно. 
Обычно which не проверяют, а проверяют keyCode. и он всегда получается 13 для Enter'а
Код

if (e.keyCode == 13 && e.ctrlKey == true ) {
             $(submitButton).click();
         }

то есть вот так должно исправно работать ... надо бы подумать над тем, что такое which ...

Добавлено через 4 минуты и 42 секунды
а вот http://www.quirksmode.org/js/events_properties.html советуют даже так выковыривать нажатую клавишу
Код

function doSomething(e) {
    var code;
    if (!e) var e = window.event;
    if (e.keyCode) code = e.keyCode;
    else if (e.which) code = e.which;
    var character = String.fromCharCode(code);
    alert('Character was ' + character);
}


Автор: FlakeMusic 16.8.2010, 14:45
e.keyCode тоже возвращает "10"

Автор: ksnk 16.8.2010, 14:47
вот кусочек из кода jQuery, который доопределяет параметр 
Код

if ( !event.which && ((event.charCode || event.charCode === 0) ? event.charCode : event.keyCode) ) {
    event.which = event.charCode || event.keyCode;
}

так что вот. Именно от маков ноги в это параметр и произрастают...

Добавлено через 1 минуту и 49 секунд
Ну тогда, значит, проверять на оба значения... :(
А сам Enter,  без контрола, как надо выглядит, кодом 13?

Автор: FlakeMusic 16.8.2010, 14:51
Цитата(ksnk @  16.8.2010,  14:47 Найти цитируемый пост)
А сам Enter,  без контрола, как надо выглядит, кодом 13? 


Да, 13.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)