2012-04-25 74 views
1

我有一页用户评论。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页面加载内容的作品)。

问题在哪里?

+0

您未填写闭引号[代码] $(P)。单击(功能){ $(本).hide(200); }); [code]让我知道如果这可以解决你的问题!欢呼声 – 2012-04-25 01:26:58

+0

这是一个简单的语法错误。您可以使用Internet Explorer查找这些内容 - 只需按F12即可。 – 2012-04-25 01:28:43

回答

1

您需要使用.on()selector参数(第二个参数):

$(document).on('click', 'p', function() { 
    $(this).hide(200); 
}) 

我看不到你的标记,让我分不清什么是最接近父p,但替换documentp最接近的父母,因此,例如你的标记是:

<div id="bla"> 
    <p>...</p> 
    <p>...</p> 
    <p>...</p> 
</div> 

你会写,随着

$('#bla').on('click', 'p', function() { 
    $(this).hide(200); 
}) 

docs

当提供一个选择器,该事件处理程序被称为 委派。当事件直接发生在绑定元素的 上时,不会调用处理函数,但仅对于 与选择器匹配的后代(内部元素)。

委托事件的优点是它们可以处理来自 后来添加到文档中的事件的事件。通过 挑选一个在连接了委托事件处理程序时保证存在的元素,可以将委派事件用于 ,从而避免需要经常附加和删除事件处理程序。

+0

+1这应该是正确的答案,虽然它会更好地使用父选择器而不是'文档'出于性能目的 – JFK 2012-04-25 01:34:14

+0

Yah即将添加xD,谢谢@JFK :) – 2012-04-25 01:36:01

+0

@NiftyDude我该如何选择('#bla')。on('click','p << = here with foo'类),function(){ $(this).hide(200); }) – Yang 2012-04-25 02:11:56

1

事件处理程序尚未绑定到从服务器响应插入的新元素。除了使用$.click()的,使用$.on()

$(document).on("click", "p", function(){ 
    $(this).hide(200); 
}); 

随着新的元素进来,他们必将为您服务。唯一的解决办法是不断地将处理程序绑定到新的元素,因为他们从服务器响应中退出。放松一下,坐下来,让jQuery完成繁重的工作。

+2

您需要使用'.on()'的委托事件处理程序语法才能正常工作。您当前显示的语法与.click()具有完全相同的效果。 – nnnnnn 2012-04-25 01:29:52

+0

@nnnnnn好眼睛。我冲过那一点太快了。 – Sampson 2012-04-25 01:32:09

相关问题