2012-05-03 3 views
3

Все, что я нашел об этом, это то, что между различными веб-браузерами существуют несоответствия, когда дело доходит до кодов клавиш.коды клавиш в разных браузерах? jquery

У меня есть следующий код, который отлично работает при нажатии ввода в Safari, Opera и Chrome, но не в Firefox.

Я использую FF 9.0.1

Вот два фрагмента кода, где происходит проблема:

1)

//Post something 
$('#postDiv').on('keydown', '#posttext', function(e) { 
    if ((e.keyCode == 13 || e.which == 13) && !event.shiftKey) { 
     post($(this)); 
    } 
}); 

2)

//Comment on a post 
$('.commenttext').live('keydown', function(e) { 
    if ((e.keyCode == 13 || e.which == 13) && !event.shiftKey) { 
     comment($(this)); 
    } 
}); 

Обе функции Арен» т даже называется.

Заранее спасибо :-) Dennis

EDIT 1

Я сделал еще несколько испытаний только с e.which и заметил, что это работает, когда я выхожу вне & & event.shiftKey! - очевидно, FF не знает этой команды. Есть ли альтернатива этому? Я хотел бы, чтобы пользователь мог нажать shift + enter, не отправляя сообщение. Я уже пробовал условие, если (e.which == 13 & & e.which! = 16), но безрезультатно.

EDIT 2 - РЕШЕНИЕ

Прежде всего спасибо за все ответы! Конечно, это должен был быть e.shiftKey, а не event.shiftKey! Теперь он работает во всех браузерах (единственное, что я еще не пробовал, это IE).

+0

Просто используйте 'event.which' для согласованного результата в браузерах. https://developer.mozilla.org/en/DOM/event.charCode#Notes –

+0

Почему вы задали этот вопрос, если он уже разрешен в вашем другом вопросе? (используйте только 'e.which', jQuery нормализует его.) –

+0

Постарайтесь связать с ключом документ, а затем идентифицируйте элемент с помощью $ (this) .attr ('id'). Может быть, это немного помогает? –

ответ

4

От http://api.jquery.com/event.which/

Событие .что свойство нормализует event.keyCode и event.charCode. Рекомендуется смотреть событие. Для ввода клавиатуры.

Вам не нужно использовать e.keyCode, и вы можете столкнуться с проблемами, когда e.which! = 13, но e.keyCode. Вы подтвердили, что проблема продолжается после удаления оценки e.keyCode из ваших структур управления?

+0

Спасибо! Я сделал еще несколько тестов только с e.which и заметил, что он работает, когда я не могу оставить &&! Event.shiftKey - видимо, FF не знает эту команду. Есть ли альтернатива этому? Я хотел бы, чтобы пользователь мог нажать shift + enter, не отправляя сообщение. Я уже пробовал условие if (e.which == 13 && e.which! = 16), но безрезультатно. – weltschmerz

+0

спасибо, нашел решение, см. Вопрос редактирование! – weltschmerz

+0

Согласно [https://developer.mozilla.org/en/DOM/event.shiftKey](https://developer.mozilla.org/en/DOM/event.shiftKey), event.shiftKey должен возвращать логическое значение в Mozilla. Вы пробовали console.log (e.shiftKey), чтобы проверить, что возвращается в каждом браузере? – jaredhoyt

1

Вам не нужно делать как keyCode и which, просто использовать which и что сделает вас отлично во всех браузерах :)

http://api.jquery.com/event.which/

+1

+1 для чего. Я могу каждый раз изучать бит разных вещей! –

+0

@ lukas.pukenis как я! Каждый день - школьный день здесь, на SO;) hehe – mattytommo

+0

@mattytommo спасибо, я изменил это :) – weltschmerz

Смежные вопросы