2012-12-16 41 views
1

所以我有以下問題。我正在嘗試將兩個事件添加到複選框的表格中。JQuery .on只能在動態生成的元素上觸發一次

這裏是一個html的例子。

<body> 
<div id='container'> //static element, everything beyond this element is dynamic 
<div id='pane_x'> 
    <div id='bottom_x'> 
    <div id='bottom_left_x'> 
    <div id='results_x'> 
    <div id='list_x'> 
     <div id='table_1'> 
     <table> 
     <tbody> 
     <tr> 
      <td> 
      <input type='checkbox' name='blah' id='blah_obj.id_x' class='blahblah'> 
      </td> 
     </tr> 
     </tbody> 
     </table> 
     </div> 
    </div> 
    </div> 
    </div> 
    </div> 
</div> 
</div> 

我試圖通過使用前綴選擇[ID^=「blah_」],選擇複選框唯一希望。我能夠得到代碼爲第一個窗格工作,即:pane_0,但它不在window_1或更高版本上觸發。

jquery(document).on("change", "[id^='blah_" + obj.id + "']", function() { 
//code here 
}); 

有可能是嵌套錯誤,因爲我只是做了一個近似的估計的HTML。奇怪的是我可以通過使用雛菊鏈.children()語句看到它們,但我無法選擇輸入元素。

由於意見不支持相同的代碼塊,因爲這部分我就在這裏新增:

jquery(document).on("change", ".checked", function() { 
var ids = jquery(this).attr("id").split("_"); 
if (ids[0] === "blah") 
    //do code 
} 
}); 

編輯爲清楚起見,ID。 id結構是「blah_」obj.id「_」個人迭代器。所以在窗格0 3個複選框應該是這樣的: blah_0_0 blah_0_1 blah_0_2

有這個頁面,我不想跟這些功能的目標2個多套複選框列表,這就是爲什麼我使用前綴選擇器。

+0

會有很多投入使用相同的ID?像2個不同窗格中的相同ID的輸入一樣? –

+0

我想你應該使用'.live()'與dinamically生成的元素。 – Dim13i

+0

哪裏定義了「obj.id」?爲什麼不使用複選框類作爲選擇器? – charlietfl

回答

1

使用startsWith選擇器的目的不是嘗試完成整個值,因爲如果使用obj.id甚至定義了obj.id

以下內容將查找所有input,ID的起始位置是'blah_',無論是現有的還是未來的。

jQuery(document).on("change", "input[id^='blah_']", function() { 
//code here 
}); 

使用類作爲選擇使得如果他們都有一個共同的類

jQuery(document).on("change", "input.blahblah", function() { 
//code here 
}); 

還要注意你在jquery錯字應該是jQuery,除非你有,否則在自己的代碼中定義它更有意義

重要注意事項如果您一直重複相同的複選框ID,則ID可能不會在頁面中重複。他們必須通過定義

+0

我想使用startsWith選擇器的原因是,有多組複選框這一頁。我不想用這些函數來選擇它們,只是它們的一個子集。即那些帶有check_前綴的。而且,這個id比我放在我的例子中要長一點。它實際上是blah_obj.id_x,如果我有3個複選框,它看起來像這樣 obj.id = 1; blah_1_0 blah_1_1 blah_1_2 等等。 – matt

+0

行..所以你沒有找到所有的集合,你需要提供更多的細化你想要過濾出來的差異。你可以修改類嗎?或者有一些祖先可以用來幫助過濾。一些生活的HTML會幫助...可以輕鬆地從瀏覽器中抓取樣本 – charlietfl

+0

我在找blah_0_x,但沒有其他任何東西blah_1_x blah_2_x等都沒有受到影響。很抱歉,由於包含大量機密信息,我無法獲得實時數據。我試圖給我想要抓取的元素添加一個特定的類,但由於某種原因,它沒有正確寫入類,或者其他函數正在覆蓋它們。 – matt

0

這裏獨特的另一個樣本:

$("body").on({ 
    click:function(){ 
     // where $(this) is the current item changed 
    } 
}, "input.blahblah"); 

相關問題