2013-10-10 33 views
2

我有一個選擇器的問題。錯誤的選擇器上的jQuery點擊功能

其實我正在寫一個小部件。

必須有2個點擊事件才能更改班級。 問題是,如果我點擊第一個事件,該類將會改變。但在第二次點擊,它總是去同一個點擊事件,甚至槽有錯誤的類(選擇)

  $(".ui-multiselect-costum-button",$(this)).click(function(){ 
       console.log($(this).parent().html()); 
       console.log($(this).attr("class")); 
       $(this).removeClass("ui-multiselect-costum-button").addClass("ui-multiselect-costum-button-active"); 
       console.log($(this).attr("class")); 
       console.log($(this).parent().html()); 
      }); 

      $(".ui-multiselect-costum-button-active",$(this)).click(function(){ 

       console.log($(this).attr("class")); 
       $(this).removeClass("ui-multiselect-costum-button-active").addClass("ui-multiselect-costum-button"); 
       console.log($(this).attr("class")); 
      }); 

控制檯顯示此:

<input type="checkbox" value="2" style="display: none;"><span class="ui-multiselect-costum-button"></span> 
ui-multiselect-costum-button 
ui-multiselect-costum-button-active 
<input type="checkbox" value="2" style="display: none;"><span class="ui-multiselect-costum-button-active"></span> 

<input type="checkbox" value="2" style="display: none;"><span class="ui-multiselect-costum-button-active"></span> 
ui-multiselect-costum-button-active 
ui-multiselect-costum-button-active 
<input type="checkbox" value="2" style="display: none;"><span class="ui-multiselect-costum-button-active"></span> 

那麼,爲什麼click事件總是使用ui-multiselect-costum-button而不是ui-multiselect-costum-button-active?

非常感謝。

回答

1

您將處理程序綁定到初始化插件時具有類的元素。您需要使用事件代表團,使其遵循動態類變化:

 $(this).on("click", ".ui-multiselect-costum-button", function(){ 
      console.log($(this).parent().html()); 
      console.log($(this).attr("class")); 
      $(this).removeClass("ui-multiselect-costum-button").addClass("ui-multiselect-costum-button-active"); 
      console.log($(this).attr("class")); 
      console.log($(this).parent().html()); 
     }); 

     $(this).on("click", ".ui-multiselect-costum-button-active", function(){ 
      console.log($(this).attr("class")); 
      $(this).removeClass("ui-multiselect-costum-button-active").addClass("ui-multiselect-costum-button"); 
      console.log($(this).attr("class")); 
     }); 
0

當初始化jQuery和點擊事件分配到兩個班,將在同一時間進行綁定,意味着:

分配click事件到$(".ui-multiselect-costum-button",$(this))

後assing點擊事件(".ui-multiselect-costum-button-active",$(this))它不存在,直到你必須在一流$(".ui-multiselect-costum-button",$(this))(在功能會有更改類名-active)點擊,但點擊事件新的類名不存在。

所以你不得不再次點擊到新類。按照Barmar的回答。

0

嘗試使用而不是點擊。您的事件正在綁定到文檔加載到相應元素的元素。您正在更改事件中元素的類,但是事件已經綁定到文檔加載中的這些元素,事件不會在您使用click的類更改時再次綁定。

0

感謝您的幫助。 事件代表團工作:D

我的oppinio是,'點擊''做'一樣。