jQuery不能按预期工作,为什么?
问题描述:
我有一页用户评论。jQuery不能按预期工作,为什么?
$(p).click(function(){
$(this).hide(200);
});
当用户点击某个评论时,这个通常会消失。好吧,它完美的作品。
但是,当用户不使用服务器的响应一样,这不工作了
服务器响应是一堆在表中找到(即定制的AJAX分页程序)
服务器响应看起来像这下评论:
<p id="next-id1">bla bla bla 1</p>
<p id="next-id2">bla bla bla 2</p>
然后该响应中插入特定的div后内容包含在MySQL表第一评论
像这样:
$("#snow-next-btn").click(function(){
$.post('/paginator.php', {}, function(response){
$("#comment-div").after(response);
});
});
好吧,它的工作完美,因为我说过。但这种方法:
$(p).click(function){
$(this).hide(200);
}
不与服务器响应工作了(但它仍然与已被印上的PHP页面加载内容的作品)。
问题在哪里?
答
您需要使用.on()
与selector
参数(第二个参数):
$(document).on('click', 'p', function() {
$(this).hide(200);
})
我看不到你的标记,让我分不清什么是最接近父p
,但替换document
到p
最接近的父母,因此,例如你的标记是:
<div id="bla">
<p>...</p>
<p>...</p>
<p>...</p>
</div>
你会写,随着
$('#bla').on('click', 'p', function() {
$(this).hide(200);
})
从docs:
当提供一个选择器,该事件处理程序被称为 委派。当事件直接发生在绑定元素的 上时,不会调用处理函数,但仅对于 与选择器匹配的后代(内部元素)。
委托事件的优点是它们可以处理来自 后来添加到文档中的事件的事件。通过 挑选一个在连接了委托事件处理程序时保证存在的元素,可以将委派事件用于 ,从而避免需要经常附加和删除事件处理程序。
答
事件处理程序尚未绑定到从服务器响应插入的新元素。除了使用$.click()
的,使用$.on()
:
$(document).on("click", "p", function(){
$(this).hide(200);
});
随着新的元素进来,他们必将为您服务。唯一的解决办法是不断地将处理程序绑定到新的元素,因为他们从服务器响应中退出。放松一下,坐下来,让jQuery完成繁重的工作。
您未填写闭引号[代码] $(P)。单击(功能){ $(本).hide(200); }); [code]让我知道如果这可以解决你的问题!欢呼声 – 2012-04-25 01:26:58
这是一个简单的语法错误。您可以使用Internet Explorer查找这些内容 - 只需按F12即可。 – 2012-04-25 01:28:43