我在for循环中创建了一个无序列表和一个按钮。我想在同一个for循环中绑定按钮的单击功能。
尝试使用连接选项。它不起作用。
function displayFeeds(items){
var ul = $('#listview');
for (var i = 0; i < items.length; i++) {
var li = $('<li/>').html(items[i].DeviceNames);
li.append($('<li/>').html(items[i].DeviceQuantity));
li .append('<input type="button" value="Add" id="'+i+'">');
// Enhance new button element
li.append($('<hr>'));
ul.append(li);
$('#"+i+"').bind('click', function () {
console.log("called");
var clickedID = this.id;
console.log(clickedID);
UpdateDeviceDetails(clickedID);
});
}
}
我该怎么办?
答案 0 :(得分:1)
尝试更改
$('#"+i+"').bind('click', function () {
到
$('#'+i).bind('click', function () {
答案 1 :(得分:1)
除了停止当前代码工作的语法错误之外,在循环中追加x
个点击处理程序的速度相对较慢。更好的解决方案是将委托事件附加到单个共享父元素。试试这个:
function displayFeeds(items){
var ul = $('#listview');
for (var i = 0; i < items.length; i++) {
var li = $('<li/>').html(items[i].DeviceNames);
li.append($('<li/>').html(items[i].DeviceQuantity));
li.append('<input type="button" value="Add" class="add-input" />');
li.append($('<hr>'));
ul.append(li);
}
}
// single event handler...
$('#listview').on('click', '.add-input', function() {
UpdateDeviceDetails(this.id);
});
你甚至可以通过将UpdateDevideDetails
的引用传递给click
处理程序来简化它,如下所示:
$('#listview').on('click', '.add-input', UpdateDeviceDetails);
var UpdateDeviceDetails = function(el) {
var id = el.id;
// rest of your logic...
}
另请注意,jQuery生成的HTML无效 - 您不能将li
作为另一个li
元素的直接子项。所有li
元素都应包含父ul
或ol
。