我已经使用append将tr和td标签添加到表中但是jQuery似乎并不知道dom对象在那里(我认为&appends / prepend做了什么?)。当我运行脚本时,表行被添加,用户可以看到它,但jQuery不会捕获超链接或其他任何内容的点击处理程序。我在另一个效果很好的页面上做了同样的事情。我也包括了这一点。如果有人能告诉我我的思路出轨的地方,我会非常感激。此外,如果我以错误的方式解决这个问题,请告诉我,以便我可以改进。
破码:
$("#addAdmin").click(function(){
$("#chosenAdmins").append('<tr id = "admin' + $("#admins").val() + '"><td align="left">' + $("#admins option:selected").text() + ' </td><td align="right"><a href="#" class = "removeAdmin" id = "ra" style = "font-size: 10px;">Remove</a></td><tr>');
});
$(".removeAdmin").click(function(e){
e.preventDefault();
alert('clicked');
alert(this.attr(id));
});
<select id = "admins">
<option value = "1">bob smith</option>
</select>
<input type = "button" id = "addAdmin"/>
<table id = "chosenAdmins" align="center" width="0%"> </table>
在不同页面上工作的类似代码是:
$(document).ready(function() {
var leftData = '<div id = "l1">left Stuff</div>';
var leftData = leftData + '<div id = "l2">left Stuff</div>';
var rightData = '<div id = "r1">right Stuff</div>';
var rightData = rightData + '<div id = "r2">right Stuff</div>';
$("#selector").prepend("<div id = 'leftSelect' style = 'float:left'>"+leftData+"</div><div id = 'rightSelect' style = 'float:left'>"+rightData+"</div>");
$("#l1").click(function(){
$(this).hide("fast", function(){
$(this).prependTo('#rightSelect');
$(this).show("fast");
});
});
});
<div id = "selector"> </div>
答案 0 :(得分:3)
您在页面上有任何$('.removeAdmin').click()
元素之前定义了事件处理程序(.removeAdmin
)。
您需要做的是委派您的活动。假设您正在使用最新的jQuery:
$("#chosenAdmins").on('click','.removeAdmin',function(e){
e.preventDefault();
alert('clicked');
alert(this.attr(id));
});
这样,事件处理程序附加到存在的元素,即chosenAdmins
表。
注意建议不要使用.live
,因为这会将事件附加到文档,而其他代码可能会无意中删除这些事件。如果您正在使用jQuery&lt; 1.7,使用delegate
:
$("#chosenAdmins").delegate('.removeAdmin','click',function(e){
e.preventDefault();
alert('clicked');
alert(this.attr(id));
});
答案 1 :(得分:2)
.removeAdmin
尚不存在。试试这个:
$("#addAdmin").click(function(){
var tr = $("#chosenAdmins").append('<tr id = "admin' + $("#admins").val() + '"><td align="left">' + $("#admins option:selected").text() + ' </td><td align="right"><a href="#" class = "removeAdmin" id = "ra" style = "font-size: 10px;">Remove</a></td><tr>');
$(".removeAdmin", tr).click(function(e){
e.preventDefault();
alert('clicked');
alert(this.attr(id));
});
});
<select id = "admins">
<option value = "1">bob smith</option>
</select>
<input type = "button" id = "addAdmin"/>
<table id = "chosenAdmins" align="center" width="0%"> </table>
另外,请注意在行中使用id="ra"
。由于可能会多次点击#addAdmin
,因此最终可能会出现多个具有相同ID的元素,这会使您的垃圾FREAK OUT!
答案 2 :(得分:1)
对于动态创建的元素,您需要live
函数:
$("#elem").live("click", function() {
// Code here
});
使用,点击,悬停和所有类型的功能。
答案 3 :(得分:1)
你在.append
中有一个拼写错误(忘了添加正斜杠),修复损坏的HTML
它应该有效:
自:
...Remove</a></td><tr>')
要:
...Remove</a></td></tr>')
答案 4 :(得分:0)
使用$(document)
选择器,同时附加dom,live
和delegate
不推荐。例如:
$(document).on('click','.removeAdmin',function(e){
e.preventDefault();
alert('clicked');
alert(this.attr(id));
});