JQuery: клавиатура для текстовых ящиков дважды срабатывает
У меня есть текстовое поле и назначена следующая функция (это единственная назначенная функция):
txt.bind("keyup",function(event){
if(event.keyCode==13)
{
var nu = $("#debug").html();
nu+="<br>enter";
$("#debug").html(nu);
}
});
Странно то, что он дважды стрелял, таким образом, отображая "enter" дважды в моем окне отладки.
Кто-нибудь знает, что вызывает это?
Ответы
Ответ 1
Я знаю, что это было довольно долго, но я удивлен, что никто не предложил:
txt.unbind();
txt.bind("keyup",function(event){
if(event.keyCode==13)
{
var nu = $("#debug").html();
nu+="<br>enter";
$("#debug").html(nu);
}
});
Если каким-то образом txt уже привязан, вызов unbind, прежде чем ваш новый bind должен его исправить. Конечно, лучше понять, почему это связано дважды. Это произошло со мной, потому что я случайно дважды включил файл JavaScirpt. Вызов unbind помог мне определить, в чем была проблема.
Ответ 2
я узнал сам - txt.bind дважды назначался в текстовое поле, поэтому он дважды запускался.
это ошибка? я думал, что привязка функции всегда будет срабатывать только один раз.. hmm
Ответ 3
У меня одна и та же проблема - два раза запускаются события с ключами и keydown, хотя их обработчики связаны только один раз, и я определенно присоединяю их только к одному элементу.
Интересным моментом является то, что это поведение можно наблюдать только в Internet Explorer и только в одном специальном случае, когда мой webapp отображается во встроенном элементе управления ActiveX (CLSID_InternetExplorer). ОС: Windows 7, IE 8, встроенный элемент управления ActiveX работает в режиме совместимости с IE7.
Однако я нашел обходное решение - обработал событие jQuery keypress, что также сделало еще более смысловой смысл в моем webapp.
Ответ 4
У меня была аналогичная проблема
обнаружил, что объект с назначенной функцией keyup находился внутри другого объекта
сначала был второй, второй - входной
обнаружил, что keyup был назначен для ввода и для div с этим входом
Ответ 5
У меня была та же проблема. Хотя я еще не нашел решения, я нашел причину, по которой он запускается дважды.
Я передаю событие, если введенный текст имеет "@". Для этого я перечисляю каждый штрих клавиши.
Чтобы ввести "@", вам нужны две ключевые прецессии (@+ shift), и это причина, по которой она запускается дважды.
Ответ 6
Возможно ли, что ваш html-элемент содержится дважды в txt?
было бы полезно, если бы вы предоставили html и присвоив javascript-код.
Ответ 7
Здесь мой обход для той же проблемы:
$('input').live('keyup keydown', function(e) {
var thisKey = e.keyCode ? e.keyCode : e.which;
if (thisKey == 13) {
e.preventDefault();
e.stopPropagation();
if (e.type == 'keyup') {
$(this).closest('form').submit();
}
}
});
Ответ 8
Мне стыдно даже упоминать об этом, но я набирал заглавную букву в своем текстовом поле, и поэтому отпуск моей клавиши Shift вызвал предполагаемое "второе срабатывание" события keyup. Оказывается, это была не вторая стрельба, а просто одурачили меня тем, что это было какое-то время. Сначала я думал, что упомянутый выше трюк отмены привязки просто не работает для меня, но это было. Я надеюсь, что это поможет другим, таким как я, которые могли бы сделать то же самое. Теперь я просто удостоверяюсь, что всегда проверяю, что при обработке моего события отпускается не только клавиша Shift, и все снова в порядке.