событие click () вызывается дважды в jquery



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



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


посоветуйте, пожалуйста.



спасибо.

1261   24  

24 ответов:

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

сделать un unbind перед щелчком;

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

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

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

//your code

});

Я попытался , e.stopImmediatePropagation(); Это, кажется, работает для меня.

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

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

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

просто позвоните .выкл() прямо перед вашим звонком .на.)(

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

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

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

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

довольно распространенное решение проблемы с двумя щелчками-это положить

e.stopPropagation()

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

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

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

для этого:

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

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

пожалуйста, попробуйте это

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

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

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);

    }
});

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

когда отображение css было переключено на блок, скрипт добавит прослушиватель событий во второй раз. Я перенес сценарий в отдельный .файл js и прослушиватель повторяющихся событий больше не инициировались.

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

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

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

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

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

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

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

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

instesd of:

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

заменить на:

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

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

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

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

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

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

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

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

это смутило меня, потому что ничего не происходило. Проблема была в том, что внутренний .shares toggle стереть внешний .shares toggle.

Comments

    Ничего не найдено.