2012-11-06 3 views
0

В нижеприведенном фрагменте кода я пытаюсь запретить пользователю вводить новые строки в <textarea> с помощью preventDefault(). Вместо ввода новых строк я хочу, чтобы клавиша ввода вызывала событие размытия. Однако приведенный ниже код обходит событие изменения после того, как пользователь изменил текст в пределах <textarea>, а затем нажал Enter. Как я могу гарантировать, что событие изменения всегда срабатывает при изменении значения текста?preventDefault() для события изменения отмены нажатия клавиши

$('textarea') 
.keypress(function (event) { 
    if (event.which == '13') {//13 = Enter 
     event.preventDefault(); 
     $(this).blur(); 
    } 
}) 
.change(function() {// THIS DOES NOT FIRE IF USER PRESSES ENTER 
    alert('change event'); 
}) 
.blur(function() { 
    console.log('blur event'); 
});//end: blur() 
+4

_Я пытаюсь помешать пользователю вводить новые строки в textarea_ Mmmmm ... кажется, что вам нужен текстовый ввод. – elclanrs

+0

Это был бы хороший вариант, но бывают случаи, когда пользователю нужно будет вводить много текста - больше, чем будет вписываться в одну строку. – jake

+0

Запустите событие изменения вручную '$ ('textarea'). Change();' или '$ (this) .change();', когда вы предотвращаете поведение по умолчанию. –

ответ

3

Похоже, что это проблема с событием ordering. В IE change событие запускается сначала, тогда blur событие увольняется, но в Firefox и Chrome это наоборот. Поэтому, когда вы запускаете событие blur() вручную в Firefox и Chrome, оно вызывает событие focus, но в IE его не будет.

+0

Поскольку я не мог положиться на упорядочение событий change & blur в браузерах, я в итоге избавился от прослушивателя событий изменений и вместо этого встроил эту же функциональность в событие blur: посмотрел, было ли новое значение textarea изменилось. – jake

0

Просто запускайте событие изменения вручную, так же, как вы запускаете событие размытия.

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