2014-06-22 90 views
0

我需要將行參數傳遞給我的onclick函數。如何將參數發送到JavaScript中的onclick函數

這是我的代碼:

function renderHostTableRowJob (dataTable) { 
    for (var i in dataTable) { 
     var notification = dataTable[i]; 
     var row = document.createElement("tr"); 
     var cell = document.createElement("td"); 
     cell.innerText = notification["Name"]; 
     row.appendChild(cell); 
     var cell = document.createElement("td"); 
     cell.innerText = notification["State"]; 
     row.appendChild(cell); 
     var cell = document.createElement("td"); 
     cell.innerText = (notification["NotificationReceived"] === true) ? "Received" : "Missing"; 
     row.appendChild(cell); 
     row.onclick = function() {alert(notification["Name"]);}; 
     $("#" + notification["Client"] + "_TableJobDetails > #" + notification["Client"] + notification["HostFormated"] + "_TableBodyJobDetails")[0].appendChild(row); 
    } 
} 

目前我所有的row.onclick = function() {alert(notification["Name"]);};正在返回在我的循環最後一次迭代值...

問題:我怎樣才能把我的價值觀到每次迭代的點擊事件?

感謝

回答

0

我得到了它與下面的代碼工作:

row.onclick = (function() { 
    var details = notification; 
    return function() { 
     showModalJobDetails(details); 
    } 
})(); 
1

捕捉notification作爲參數傳遞給匿名函數。因爲它看起來像你使用jQuery,您可以使用jQuery.each,這將簡化您的迭代和它的副作用捕捉它:

$.each(dataTable, function(index, notification) { 
    // ... 
}); 

順便說一句,如果你使用jQuery,您可以編寫代碼更簡潔:

var row = $('<tr>').click(function() { 
    alert(notification.Name); 
}); 
$('<td>').text(notification.Name).appendTo(row); 
$('<td>').text(notification.State).appendTo(row); 
$('<td>').text(notification.NotificationReceived ? 'Received' : 'Missing').appendTo(row); 
row.appendTo('#' + notification.Client + '_TableJobDetails > ' + 
      '#' + notification.Client + notification.HostFormated + '_TableBodyJobDetails'); 

此外,如果你的ID是唯一的(因爲他們應該的),你不需要指定整個層次;只需使用

row.appendTo('#' + notification.Client + notification.HostFormated + '_TableBodyJobDetails'); 

此外,雖然它是在你的代碼變化較大,可以考慮使用代表團on

+0

嗨@icktoofay感謝您的快速反應,你能告訴如何捕捉通知作爲paremeter一個例子。我知道我正在使用jQuery,但我也在學習JavaScript。非常感謝 –

+0

@Manuel:我做到了;使用'$ .each'來做到這一點。如果你想在沒有'$ .each'的情況下做到這一點,你可以用一個IIFE手動完成,例如'!function(someVariable){/ * ... * /}(someVariable)'。 – icktoofay

相關問題