2014-01-20 87 views
0

我有一個點擊事件觸發其他點擊事件,添加一個元素到DOM。 編輯:但是當我第二次點擊它時添加了兩個元素,第三次添加了兩個元素。當我檢查jQuery隊列時,它確認我已將事件添加到每次觸發的隊列中。來自jQuery的清除點擊隊列

我試圖完成的是通過單擊另一個元素將一個單擊事件添加到兩個下拉列表。

$(".step-1 a").on("click", function(e){ 
     e.preventDefault(); 
     var userValue = $(this).attr('id'); 
     $(".template-image").removeClass("selected"); 
     $(this).children(":first").addClass("selected"); 
     $("#page_template option ").each(function(){ 
      var t = $(this); 
      var cValue = t.attr("value"); 

      if(t.attr("selected") === "selected"){ 
       t.removeAttr("selected"); 
      } 
      if(t.attr("value") === userValue){ 
       t.prop("selected", "selected"); 
       $('#page_template').trigger('change'); 
       var template = t.attr("value"); 
       switch (template) 
       { 
       case "default": 
        $(".step-2").slideDown("fast"); 
        $(".step-2").addClass("show"); 
        break; 
       default: 
        $(".step-2").removeClass("show"); 
        $(".step-2").slideUp("fast"); 
        break; 
       } 
      } 
     }); 
    }); 

$('.step-2 img').on("click", function(e){ 
    e.preventDefault(); 
    var userinput = $(this).attr('id'); 
    $('.flexible-footer .acf-fc-add').each(function(){ 
     var text = $(this).text(); 
     if(text === "Add columns"){ 
      $(this).trigger('click'); 
      $('.flexible-footer .acf-fc-popup ul li a').each(function(){ 
       var column = $(this).attr('data-layout'); 
       if (column === userinput) { 
        $(this).trigger('click'); 
        $(this).finish(); 
        console.log($(this).queue()); 
       } 
      }); 
     } 
    }); 

回答

0

這聽起來像你在相同的元素上多次分配點擊事件。這個問題的一個簡單的解決方案是使用jQuery功能off()刪除舊的點擊事件,然後再添加一個新事件。或者確保您只是將點擊事件添加到尚未擁有它們的新元素。你可以這樣說:

$('img.or-whatever').off('click').on('click', function(ev){...}); 

或者,也許使用的命名空間以增強其可讀性:

$('img.or-whatever').off('click.custom-namespace').on('click.custom-namespace', function(ev){...}); 

它可能不是正確的回答你的問題,但它可能是一個解決辦法。

編輯: 如果你只是想清除事件隊列,你可以試試clearQueue()

+0

我試過這個,它似乎停止再次發生點擊事件,如果我添加.off()。我還注意到,第一次點擊激發了一次點擊事件,第二次點擊將激發兩次點擊事件,並且它將保持兩次點擊以便點擊。 –

+0

如果你想在第一次運行時清除事件隊列,也許你可以嘗試http://api.jquery.com/clearQueue/? –

+0

感謝您的提示。我嘗試過,但沒有得到它的工作,但我會再試一次,看看我能否找到一種方法使其工作。 –