Событие jQuery Button.click () запускается дважды - PullRequest
71 голосов
/ 18 июня 2010

У меня следующая проблема с этим кодом:

<button id="delete">Remove items</button>

$("#delete").button({
     icons: {
             primary: 'ui-icon-trash'
     }
}).click(function() {
     alert("Clicked");
});

Если я нажму эту кнопку, предупреждение появится два раза.Это не только с этой конкретной кнопкой, но и с каждой отдельной кнопкой, которую я создаю.

Что я делаю не так?

Ответы [ 12 ]

115 голосов
/ 12 марта 2013

В этом случае мы можем сделать следующее:

$('selected').unbind('click').bind('click', function (e) {
  do_something();
});

Первоначально событие было запущено два раза, когда страница обновляется, она запускается четыре раза.Прошло много бесполезных часов, прежде чем я решил с поиском в Google.

Я также должен сказать, что код изначально работал, пока я не начал использовать виджет аккордеона JQueryUI.

62 голосов
/ 18 июня 2010

Ваш текущий код работает, вы можете попробовать его здесь: http://jsfiddle.net/s4UyH/

У вас есть что-то вне примера, запускающее другой .click(), проверьте другие обработчики, также вызывает событие click для этого элемента.

31 голосов
/ 13 июня 2014

Странное поведение, которое я испытал также. Так что для меня «вернуть ложь» сделал свое дело.

        $( '#selector' ).on( 'click', function() {
            //code
            return false;
        });
15 голосов
/ 11 марта 2015

Если вы используете

$( document ).ready({ })

или

$(function() { });

более одного раза, функция щелчка сработает столько раз, сколько она используется.

10 голосов
/ 28 мая 2015

вы можете попробовать это.

    $('#id').off().on('click', function() {
        // function body
    });
    $('.class').off().on('click', function() {
        // function body
    });
3 голосов
/ 22 марта 2015

У меня была такая же проблема, и я попробовал все, но это не сработало.Поэтому я использовал следующий трюк:

function do_stuff(e)
{
    if(e){ alert(e); }
}
$("#delete").click(function() {
    do_stuff("Clicked");
});

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

2 голосов
/ 22 декабря 2018
$("#id").off().on("click", function() {

});

работал для меня.

$("#id").off().on("click", function() {

});
1 голос
/ 25 октября 2018

Это также может быть вызвано наличием input и label внутри элемента с прослушивателем щелчков.

Вы нажимаете label, что вызывает щелчоксобытие и , а также другое событие щелчка на input для label.Оба события всплывают в вашем элементе.

См. Это перо причудливого переключателя "только для CSS": https://codepen.io/stepanh/pen/WaYzzO

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

1 голос
/ 16 августа 2018

в моем случае я использовал команду изменения следующим образом

$(document).on('change', '.select-brand', function () {...my codes...});

и затем я изменил способ на

$ ('. Select-brand'). On ('change', function () {... мои коды ...});

и это решило мою проблему.

1 голос
/ 24 августа 2016

Также как Ник пытается сказать, что-то извне вызывает событие дважды. Чтобы решить эту проблему, вы должны использовать event.stopPropagation (), чтобы предотвратить образование пузырей у родительского элемента.

$('button').click(function(event) {
    event.stopPropagation();
});

Надеюсь, это поможет.

...