Подтвердить что ты не робот

JQuery: клавиатура для текстовых ящиков дважды срабатывает

У меня есть текстовое поле и назначена следующая функция (это единственная назначенная функция):

txt.bind("keyup",function(event){
    if(event.keyCode==13)
    {
        var nu = $("#debug").html();
        nu+="<br>enter";
        $("#debug").html(nu);
    }
});

Странно то, что он дважды стрелял, таким образом, отображая "enter" дважды в моем окне отладки. Кто-нибудь знает, что вызывает это?

4b9b3361

Ответ 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, и все снова в порядке.