2012-02-04 20 views
0

jquery有點新,但我非常喜歡它,在過去的幾個星期裏我一直在通過開發直接進行概念驗證。在對象集合上使用觸發器

我想在多個對象上實現一個觸發器,但無論我做什麼,只會觸發集合中的第一個對象。我知道triggerHandler有這個限制,但現在應該觸發。我認爲這是可行的!請幫忙!

這是我目前有:

與同一類一堆輸入框(如

input type="checkbox" id="checkX" class="allchecks" value="show" />` 

然後一個按鈕,我想觸發所有點擊並運行每個點擊處理程序

<input type="button" value="select all" value="click me" id="button1" /> 

然後...

$j('#button1').click(function(){ 
    $j('.allchecks').each(function(){ 
     if(!$j(this).is(':checked')){ 
      $j(this).trigger('click'); 
     } 
    }); // end each 
}); // end click 

似乎不管我做什麼只有第一個對象有它的綁定點擊事件發射。

任何意見將不勝感激。

更新:出於無奈我寫了相同的代碼,只是沒有使用每個循環我分別手動觸發的各一個,並以同樣的方式失敗 - 它只是觸發第一個對象上的事件和停止。

更新:這裏是結合到輸入的點擊事件的一個示例:

$j('#checkx').click(function(){ /* do something */ }); //end click 

更新:糟糕複製/粘貼誤差,固定它。但它不會減損這個問題。

+0

也許事件處理程序拋出錯誤,阻止其他處理程序的執行。請創建一個http:// jsfiddle。網絡/演示。 – 2012-02-04 17:14:58

+0

我不明白任何人都可以編寫javascript代碼,並且不使用錯誤控制檯或調試控制檯來查看腳本錯誤。瞭解如何立即做到這一點。它會告訴你這個錯誤,並將在未來爲你節省幾小時的時間。 – jfriend00 2012-02-04 17:37:38

+0

沒有錯誤。我在firefox中使用firebug,讓它在那裏工作,然後檢查其他瀏覽器。我不明白你是怎麼做的......沒關係,不值得。 – gillyspy 2012-02-04 20:09:19

回答

1

您的代碼缺少)

if(!$j(this).is(':checked'){ 

fiddle

PS。你不需要.each

$j('#button1').click(function(){ 
    $j('.allchecks:not(:checked)').trigger('click'); 
}); // end click 

updated fiddle

編輯您使用上的多個元素相同的ID,這是一個禁忌。這是行不通的,現在你已經看到了,爲什麼你永遠不會做一遍;-)

$j('.allchecks').click(function(){ /* do something */ }); 
+0

是的,好吧,我的語法錯誤的錯誤...複製/粘貼編輯錯誤在這裏。我修正了這一點。原來,它在jsfiddle中工作,但不在這裏!我不知道爲什麼,因爲我沒有得到任何錯誤。我更新了[js fiddle](http://jsfiddle.net/GP3gJ/5/),使它更像我實際上正在做的事情,以證明自己。 – gillyspy 2012-02-04 21:29:29

+0

你不使用相同的ID? – ori 2012-02-04 21:37:49

+0

不使用相同的ID - 請參閱前面更新的小提琴。 X是一個例子。但好消息,我找到了原因。當你點擊一個複選框時,「檢查​​」首先發生,然後是回調。但是,當你觸發點擊事件回調首先發生,然後「檢查」。以下是我必須做的調用觸發器:設置標記,讓它觸發,重新設置! toggle()並不是一個好例子,因爲我沒有在技術上做切換,所以你無法輕易檢測到這一點。觸發器的代碼調用 '$ j('。histt​​oggles')。prop('checked',true).trigger('click')。prop('checked',true);' – gillyspy 2012-02-04 22:51:15

0

你不需要觸發點擊事件選中該複選框,只需使用prop方法將checked設置爲true。請參閱demo

$('#button1').click(function(){ 
    $('.allchecks').prop('checked', true); 
});