Javascript 动态绑定值以双击
我正在使用JQuery和javascript动态创建一个表。我还成功地为每一行绑定了方法,但是当我尝试绑定dblclick事件时,它总是使用最后一行值(在本例中是列表中的最后一个客户): 我想这是我不理解的函数调用的范围或上下文,如果您可以添加一个链接到您的答案,以便我能够了解更多有关问题/解决方案的信息,我将不胜感激 提前感谢试试这个Javascript 动态绑定值以双击,javascript,jquery,Javascript,Jquery,我正在使用JQuery和javascript动态创建一个表。我还成功地为每一行绑定了方法,但是当我尝试绑定dblclick事件时,它总是使用最后一行值(在本例中是列表中的最后一个客户): 我想这是我不理解的函数调用的范围或上下文,如果您可以添加一个链接到您的答案,以便我能够了解更多有关问题/解决方案的信息,我将不胜感激 提前感谢试试这个 newRow.ondblclick=function(){ SomeJavaScriptCode }; 您的问题是您在每个i上重置了处理程序,所以侦听器在循环
newRow.ondblclick=function(){ SomeJavaScriptCode };
您的问题是您在每个i上重置了处理程序,所以侦听器在循环结束时将last i作为参数 使用ondblclick,因为您已经使用内联事件处理程序:
var code = customers[i].Cust_Code,
name = customers[i].Cust_Name;
newRow.attr('ondblclick', 'selectCustomer(' + code + ',' + name + ')');
在您的情况下,您可以使用委托侦听器,使用以下命令:
for (var i = 0; i < customers.length; i++) {
var newRow = $("<tr><td></td><td></td><td></td><td></td><td></td><td></td></tr>");
newRow.attr('index', i);
newRow.appendTo(tbl);
}
根据我的经验,还不如使用mouseenter和mouseleave事件,而不是mouseover和mouseout。但这取决于你。我认为这样更好
/**
* In this case using on is much better.
* check this:
* http://api.jquery.com/on/
*/
newRow.on("dblclick", {Cust_Code: customers[i].Cust_Code,
Cust_Name: customers[i].Cust_Name}, function(event) {
selectCustomer(event.data.Cust_Code, event.data.Cust_Name);
});
对我来说很好。检查你的控制台是否有错误。感谢你的时间和额外信息,谢谢。
for (var i = 0; i < customers.length; i++) {
var newRow = $("<tr><td></td><td></td><td></td><td></td><td></td><td></td></tr>");
newRow.attr('index', i);
newRow.appendTo(tbl);
}
$('tr[index]').on('click',rowSelect_Popup($(this).attr('index')))
.on('onmouseover',rowMouseOver_Popup($(this).attr('index')))
.on('onmouseout',rowMouseOut_Popup($(this).attr('index')))
.on('ondblclick',function() {
var i = $(this).attr('index'),
code = customers[i].Cust_Code,
name = customers[i].Cust_Name;
selectCustomer(code,name);
})
/**
* In this case using on is much better.
* check this:
* http://api.jquery.com/on/
*/
newRow.on("dblclick", {Cust_Code: customers[i].Cust_Code,
Cust_Name: customers[i].Cust_Name}, function(event) {
selectCustomer(event.data.Cust_Code, event.data.Cust_Name);
});