2013-06-23 52 views
0

有一個表的Tbody ID爲:table_tbody 我想在jquery中添加10行可點擊的第二個td。 我已經創建了一個變量:element這是包含<td> s的<tr>行。可點擊的第二個TD不工作

這是代碼的一部分。

for (var ind = 0; ind < 10; ++ind) { 
    var elem = element.clone(); 
    elem.children().next().first().attr("id", "table_td" + ind.toString()); 
    $("#table_td" + ind.toString()).click({playerID: 0}, playerFunc); 
    $('#table_tbody').append(elem); 
} 

正如你看到我設置唯一的ID爲每行的第二td。 然後我連接到它的點擊事件。然而點擊事件後,點擊事件並沒有觸發。 沒有顯示錯誤。我是不是做得不對?

編輯:Link to JSFiddle

+1

請出示你的'element'變量與最初的樣子你的HTML你開始克隆前... –

+0

@ RokoC.Buljan請看更新(添加編輯) – maximus

+0

'$(「#table_td」+ i).click({playerID:0},playerFunc);''playerID:0'應該做什麼? –

回答

3

你搞砸指令序列位;)

$("#table_td" + ind.toString()) 

會在DOM樹中的元素,它沒有找到它,因爲你還沒有加入還沒完成。您需要首先追加元素,然後才能添加事件偵聽器。這應該工作:

for (var ind = 0; ind < 10; ++ind) { 
    var elem = element.clone(); 
    elem.children().next().first().attr("id", "table_td" + ind.toString()); 
    $('#table_tbody').append(elem); 
    $("#table_td" + ind.toString()).click({playerID: 0}, playerFunc); 
} 
+1

imo已經死了。 'elem.find(「#table_td」+ ind.toString());'是一種直接替代方法,因爲它搜索尚未臨時克隆的DOM元素。 – zsawyer

+0

@xjedam這不工作 – maximus

+0

對不起,沒有看到用JSFiddle編輯。像@Roko提到的playerFunc定義超出了範圍 - 在for循環之前移動它,它應該可以工作 – xjedam

1

簡單的問題是什麼第一地上..雞蛋或雞肉

for (var ind = 0; ind < 10; ++ind) { 
    var elem = element.clone(); 
    elem.children().next().first().attr("id", "table_td" + ind.toString()); 
    $('#table_tbody').append(elem); 
    $("#table_td" + ind.toString()).click({playerID: 0}, playerFunc); 
} 
1

無需.toString()當你其實已經添加到字符串"string"+ num
使用.on()法代表動態生成的元素,
無需在for傢伙內部創建click處理程序
使用:odd選擇器指定每個第二個元素。

http://jsfiddle.net/ahzzK/4/

$(document).ready(function() { 

    var playerFunc = function() { // Function scope! 
     alert("hren"); 
    } 


    var element = $("<tr>") 
       .append($("<td />", {"text":"bla1"})) 
       .append($("<td />", {"text":"bla2"})); 

    for (var i=0; i<10; i++) { 
     var elem = element.clone(); 
     elem.children().next().first().attr("id", "table_td"+ i); 
     $('#table_tbody').append(elem); 
    } 

    $("#table_tbody").on('click', 'td:odd', playerFunc); 

}); 
+0

如果我只想要第二個​​是可點擊的,並且有多個​​該排? – maximus

2

看到這個:

example

playerFunc不上定義。

function playerFunc(){ 
    alert("hren" + this.playerID); 
} 
3

理想的方法是使用class,而不是id

for (var ind = 0; ind < 10; ++ind) { 
    var elem = element.clone(); 
    elem.children().next().first().attr("class", "table_td");  
    $('#table_tbody').append(elem); 
} 

$(document).on('click', '.table_td', function(){ 
    playerFunc(); 
}); 

請看到這一點:http://jsfiddle.net/JSWorld/ahzzK/6/