2014-06-22 5 views
0

Мне нужно передать параметры строки в мою функцию onclick.Как отправить параметры функции onclick в javascript

это мой код:

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"]);}; возвращаемых значение для последней итерации цикла в моем ...

ВОПРОС: Как я могу отправить свои значения на событие click на каждой итерации?

благодаря

ответ

0

Я получил это работает на код ниже:

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

Capture 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'); 

Далее, если ваши идентификаторы уникальны (так как они должны быть), вам не нужно указывать всю иерархию; просто использовать

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

Кроме того, в то время как это больше изменение в коде, рассмотреть возможность использования делегации с on.

+0

Привет @icktoofay спасибо за ваш быстрый ответ, не могли бы вы привести пример того, как захватить уведомление как paremeter. Я знаю, что я использую jquery, но я также изучаю javascript. Большое спасибо –

+0

@ Manuel: Я сделал; используя '$ .each' делает это. Если вы хотите сделать это без '$ .each', вы можете сделать это вручную с помощью IIFE, например. '! function (someVariable) {/ * ... * /} (someVariable)'. – icktoofay

Смежные вопросы