好的,所以我想对搜索结果中的所有问题做相反的处理。大多数人都希望从嵌套div或诸如此类的东西中停止jQuery,因为.load()方法最终被多次调用。
每次点击某些内容时,我都想调用.load()。麻烦的是,我选择的id链接被.load()替换掉了。我在第一次调用.load()期间在innerHTML插入的链接上包含了相同的id。 jQuery不会为后续点击选择新填充的id,即使它现在再次出现在DOM中。
主页:
<div id="#replace_me">
<p>some stuff</p>
<a id="click_me">A LINK</a>
</div>
<script type="text/javascript">
$('#click_me').click(function () {
$('#replace_me').load('new.html');
});
</script>
NEW.HTML:
<p>some new stuff that actually is dynamic and changes periodically</p>
<a id="click_me">A LINK</a>
为了简单起见,我不打算讨论为什么我只是不将该链接留在替换之外,但实际情况是它需要消失并返回.load()方法。
答案 0 :(得分:2)
使用.delegate
,它允许您根据特定的根元素(#click_me
)将事件处理程序附加到元素(#replace_me
):
$("#replace_me").delegate("#click_me", "click", function () {
$('#replace_me').load('new.html');
});
示例: http://jsfiddle.net/ATyUq/
由于this answer中列出的原因, .delegate
通常是比.live
更好的选择。
答案 1 :(得分:1)
您可以使用实时功能:
$('#click_me').live('click', function () {
$('#replace_me').load('new.html');
});
这将自动将事件重新绑定到新添加的元素。
答案 2 :(得分:1)
您正在寻找的是live
方法
$(document).ready(function() {
$('#click_me').live('click', function() {
$('#replace_me').load('new.html');
});
});
答案 3 :(得分:0)
您需要使用.live()
,因为一旦新的标记加载到页面,原始的#clickme
元素就不再存在了。
$('#click_me').live("click", function () {
$('#replace_me').load('new.html');
});
答案 4 :(得分:0)
这与load()
并没有多大关系,而是在新链接存在之前附加了点击处理程序,因此新链接没有附加到处理程序和处理程序。使用jQuery的live()
:
$('#click_me').live('click', function () {
$('#replace_me').load('new.html');
});