我正在动态创建一个表,我需要为添加的每个元素添加一个onclick事件,但是这需要一个动态参数add,我试过以下
trElements[i + 1].onclick = function () {
navigateToController('/Home/Client', "'" + machine.DeviceID + "'");
};
但是这会将onclick事件显示为navigateToController(' / Home / Client',"'" + machine.DeviceID +"'& #34)
而不是navigateToController(' / Home / Client',' DeviceName');正如我想的那样,我也尝试在html中使用onclick事件,并将DEVICEID替换为实际的deviceid。
var element = trElements[i + 1].outerHTML.replace('DEVICEID', machine.DeviceID);
trElements[i + 1].outerHTML = element;
这显示为正确,但是当页面加载时,它仍然有deviceid?
我确信这是非常简单的......但任何指针都会受到赞赏。
答案 0 :(得分:0)
我不完全确定我理解这个问题,但这可能是一个范围问题。您可能需要使用bind创建当前值为DeviceID
的处理程序:
var machineId = 0;
function navigateToController(machineId) {
alert(machineId);
}
function addRow() {
var t = document.getElementById('thetable');
var tr = t.insertRow();
var td = tr.insertCell();
td.appendChild(document.createTextNode("machine " + machineId));
tr.addEventListener('click', navigateToController.bind(null, machineId));
machineId++;
}
<button onclick="addRow()">Add Row</button>
<table id="thetable"></table>
但是这会将onclick事件显示为navigateToController('/ Home / Client',''“+ machine.DeviceID +”'“)
如果这就是你的意思,你就不会在标记中看到变量的值。
为什么不只是navigateToController('/Home/Client', machine.DeviceID )
?它已经是一个字符串了。无需尝试在其周围添加引号。您最终会得到一个包含引号的参数。
var deviceId = 'theDeviceId';
// This is not what you want. Notice this alert includes the single quotes as part of the string: "'theDeviceId'"
alert( "'" + deviceId + "'");
// This is what you want. This alert has just the (unquoted) value.
alert( deviceId );
答案 1 :(得分:0)
更好的方法是不要这样做。
更好地将事件处理程序附加到现有容器(在这种情况下表格似乎很好)并检查冒泡事件。
使用jQuery非常简单:
var myTable = $("table#theTable");
myTable.on("click", "tr", function(){ // Click event handler.
var clickedRow = $(this);
...
});
如果您需要与每行相关的一些数据,只需在标签的“data-”属性(即“data-myId =”someId“»)中附加。然后你可以通过事件处理函数clickedRow.data(“myId”)来读取它们。
这样,您可以使用单个函数来处理所有行的所有事件。更简单,浪费太少的妈妈。
答案 2 :(得分:0)
trElements[i + 1].onclick = (function () {
var deviceId = machine.DeviceID;
return function(){
navigateToController('/Home/Client', "'" + deviceId + "'");
}
})();
答案 3 :(得分:0)
感谢每个人的投入。
为了更新,我找到了一个解决方案,我认为,我可以创建元素,将数据添加到innerHtml,并使用:
setAttribute(“onclick”,“navigateToController('/ Home / Client','”+ deviceId +“')”);
我在我的解决方案的另一部分中使用了它,它可以工作......