我正在使用appendTo在单击按钮后在两个列表之间移动列表项。该按钮位于每个li
元素中。每个li
都有两个按钮,其中一次只能显示一个按钮,具体取决于li当前所在的列表。
这是功能:
// 'this' is the first list
// Click Handler for remove and add buttons
$(this.selector + ', ' + settings.target + ' li button').click(function(e) {
var button = $(e.target);
var listItem = button.parent('li');
listItem.children("button").toggleClass("hidden");
if (button.hasClass("assign")) {
// Add Element to assignment list
listItem.appendTo(settings.target);
}
else
if (button.hasClass("remove")) {
// Remove Element from assignment list
listItem.appendTo(source);
}
})
只要列表项位于原始li中,就会触发按钮中的单击事件。但是,一旦使用listItem.apendTo
将其移动到其他列表。点击项目不再触发。为什么会这样?我在文档中找不到任何相关内容。
答案 0 :(得分:3)
有时,如果脚本首次加载时,jQuery无法在DOM中出现,那么jQuery就无法找到。如果它是动态创建的元素,请尝试使用'on'
替换您的点击事件处理程序而不是:
$(".aClass").click(function(){
// Code here
})
尝试:
$("body").on("click", ".aClass", function(){
Code here
})
答案 1 :(得分:0)
根据用户' apsdehal'的推荐,删除是我所需要的:
// Click Handler for remove and add buttons
$(source.selector + ', ' + settings.target ).delegate("li button", "click", function(e) {
var button = $(e.target);
var listItem = button.parent('li');
listItem.children("button").toggleClass("hidden");
if (button.hasClass("assign")) {
// Add Element to assignment list
listItem.appendTo(settings.target);
}
else
if (button.hasClass("remove")) {
// Remove Element from assignment list
listItem.appendTo(source);
}
});
答案 2 :(得分:0)
您应该使用on
事件。
$(".aClass").on("click", function(){
//Your custom code
})
on
事件对于动态生成的数据+ HTML中的静态数据非常有用。