JQuery: текстовое поле запускается дважды - PullRequest
11 голосов
/ 05 марта 2010

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

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

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

Ответы [ 8 ]

5 голосов
/ 01 августа 2014

Я знаю, что это было довольно давно, но я удивлен, что никто не предложил:

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 помог мне определить, в чем проблема.

3 голосов
/ 05 марта 2010

я выяснил сам - txt.bind был назначен дважды текстовому полю, поэтому он дважды сработал. это ошибка? я думал, что связывание функции всегда будет срабатывать только один раз .. хм

2 голосов
/ 10 ноября 2010

У меня та же проблема - события keyup и keydown запускаются дважды, хотя их обработчики связаны только один раз, и я определенно присоединяю их только к одному элементу.

Интересно, что такое поведение можно наблюдать только в Internet Explorer и только в одном особом случае, когда мое веб-приложение отображается во встроенном элементе управления ActiveX (CLSID_InternetExplorer). ОС: Windows 7, IE 8, встроенный элемент управления ActiveX работает в режиме совместимости с IE7.

Однако я нашел обходной путь - обработал событие jQuery keypress , которое также имело более смысловой смысл в моем веб-приложении.

1 голос
/ 28 апреля 2015

У меня была такая же проблема. Хотя я пока не смог найти решение, я нашел причину, по которой оно срабатывает дважды.

Я передаю событие, если во введенном тексте есть «@». Для этого я перечисляю каждое нажатие клавиши. Чтобы ввести «@», вам нужны два ключевых прецесса (@ + shift), и по этой причине он запускается дважды.

1 голос
/ 01 февраля 2012

У меня была похожая проблема
обнаружил, что объект с назначенной функцией keyup был внутри другого объекта
первый был div второй был введен
обнаружил, что keyup был назначен для ввода и div с этим вводом

0 голосов
/ 14 мая 2019

Мне стыдно даже упоминать об этом, но я печатал заглавную букву в своем текстовом поле, и поэтому нажатие клавиши Shift вызвало предполагаемое «второе срабатывание» события keyup.Оказывается, это была не вторая стрельба, а просто одурачили меня тем, что это было какое-то время.Сначала я думал, что упомянутый выше трюк отмены привязки просто не работает для меня, но это было.Я надеюсь, что это поможет другим, таким как я, которые могли бы сделать то же самое.Теперь я просто проверяю, что при обработке моего события всегда нажимается не только клавиша Shift, и все снова в порядке.

0 голосов
/ 27 июня 2012

Вот мой обходной путь для той же проблемы:

$('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();   
        }
    }
});
0 голосов
/ 05 марта 2010

возможно ли, что ваш html-элемент дважды содержится в txt?

было бы полезно, если бы вы предоставили html и назначающий код javascript.

...