Событие click() вызывает два раза в jquery

Я устанавливаю элемент ссылки и вызываю его событие click в jquery, но событие click вызывает два раза, см. ниже код jquery.

$("#link_button")
.button()
.click(function () {
   $("#attachmentForm").slideToggle("fast");
});

Просьба сообщить.

Спасибо.

Ответ 1

Убедитесь, что вы случайно не включили свой script в свою HTML-страницу дважды.

Ответ 2

Отменить разблокировку перед кликом;

$("#link_button").unbind('click');
$("#link_button")
.button()
.click(function () {
   $("#attachmentForm").slideToggle("fast");
});

Ответ 3

Это означает, что ваш код дважды включал скрипт jquery. Но попробуйте следующее:

$("#btn").unbind("click").click(function(){

//your code

});

Ответ 4

Я пробовал, e.stopImmediatePropagation(); Кажется, это работает для меня.

Ответ 5

В моем случае я использовал ниже script для решения проблемы

$('#id').off().on('click',function(){
    //...
});

off() отменяет привязку всех событий к #id. Если вы хотите отменить только событие click, используйте off('click').

Ответ 6

Просто позвоните .off() прямо перед вызовом .on().

Это приведет к удалению всех обработчиков событий:

$(element).off().on('click', function() {
// function body
});

Чтобы удалить только зарегистрированные обработчики событий 'click':

$(element).off('click').on('click', function() {
// function body
});

Ответ 7

Скорее общее решение проблемы с двумя щелчками:

e.stopPropagation()

в конце вашей функции (если вы используете function(e)). Это предотвращает пузырьковое событие, которое может привести к второму выполнению функции.

Ответ 8

У меня была та же проблема, но вы можете попробовать изменить этот код

$("#link_button")
.button()
.click(function () {
   $("#attachmentForm").slideToggle("fast");
});

:

$("#link_button").button();
$("#link_button").unbind("click").click(function () {
   $("#attachmentForm").slideToggle("fast");
});

Для меня этот код решил проблему. Но будьте осторожны, чтобы случайно не включить ваш script дважды на вашу HTML-страницу. Я думаю, что если вы правильно выполняете эти две вещи, ваш код будет работать правильно. Благодаря

Ответ 9

попробуйте это

$('#ddlSupervisor').live('change', function (e) {
    if (e.handled !== true) { //this makes event to fire only once
    getEmployeesbySupervisor();
    e.handled = true;
   }
});

Ответ 10

Это определенно ошибка, особенно в FireFox. Я искал alot, попробовал все вышеупомянутые ответы и, наконец, получил это как ошибка многих экспертов над SO. Итак, я, наконец, придумал эту идею, объявив переменную типа

var called = false;
$("#ColorPalete li").click(function() {
    if(!called)
    {
             called = true;
             setTimeout(function(){ //<-----This can be an ajax request but keep in mind to set called=false when you get response or when the function has successfully executed.
                 alert('I am called');
                 called = false;
             },3000);

    }
});

Таким образом, он сначала проверяет, скорее, функция была вызвана ранее или нет.

Ответ 11

Добавление e.preventDefault(); в начале моей функции сработало для меня.

Ответ 12

Это старый вопрос, но если вы используете делегирование событий, это то, что вызвало это для меня.

После удаления .delegate-two он прекратил выполнение дважды. Я считаю, что это происходит, если оба делегата присутствуют на одной странице.

$('.delegate-one, .delegate-two').on('click', '.button', function() {
    /* CODE */
});

Ответ 13

этот фрагмент кода не содержит ничего плохого. Это другая часть вашего script, как @karim сказал

Ответ 14

В моем случае он отлично работал в Chrome, и IE дважды вызывал .click(). если это была ваша проблема, тогда я исправил ее, вернув false, после вызова события .click()

   $("#txtChat").keypress(function(event) {
        if (event.which == 13) {
            $('#btnChat').click();
            $('#txtChat').val('');
            return false;
        }
    });

Ответ 15

Вызов unbind решил мою проблему:

$("#btn").unbind("click").click(function() {
    // your code
});

Ответ 16

Когда я использую этот метод на странице загрузки с jquery, я пишу $('#obj').off('click'); перед установкой функции щелчка, поэтому пузырь не возникает. Работает для меня.

Ответ 17

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

$('.someClass[data-foo="'+notAlwaysUniqueID+'"]:first').click();

Ответ 18

У меня тоже была эта проблема в FF. Однако мой тег привязан к тегу <a>. Хотя тег <a> никуда не денется, он все равно делает двойной щелчок. Вместо этого я заменил тег <a> тегом <span>, и проблема с двойным щелчком исчезла.

Другой альтернативой является полное удаление атрибута href, если ссылка никуда не идет.

Ответ 19

Я столкнулся с этой проблемой, потому что мой $(elem).click(function(){}); script был встроен в div, для которого было установлено значение style="display:none;".

Когда css-дисплей был переключен на блок, script добавит прослушиватель событий второй раз. Я переместил script в отдельный .js файл, и дублирующий прослушиватель событий больше не был запущен.

Ответ 20

Мой простой ответ заключался в том, чтобы превратить привязку кликов в функцию и вызвать это из onclick элемента - обработал удовольствие! тогда как ни одно из вышеизложенных не делало

Ответ 21

Я не уверен, почему, но у меня была эта проблема с

$(document).on("click", ".my-element", function (e) { });

Когда я изменил его на

$(".my-element").click(function () { });

Проблема решена. Но определенно что-то не так в моем коде.

Ответ 22

Я решил эту проблему, изменив тип элемента. вместо кнопки я помещаю вход, и эта проблема больше не возникает.

instesd of:

<button onclick="doSomthing()">click me</button>

заменить на:

<input onclick="doSomthing()" value="click me">

Ответ 23

Была та же проблема. Это сработало для меня -

$('selector').once().click(function() {});

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

Ответ 24

В моем случае HTML был выложен следующим образом:

<div class="share">
  <div class="wrapper">
    <div class="share">
    </div>
  </div>
</div>

И мой jQuery был таким:

jQuery('.share').toggle();

Это смутило меня, потому что ничего не случилось. Проблема заключалась в том, что внутренний .share toggle будет отменять внешний .share toggle.