我想从同一个脚本多次触发jQuery .load()

时间:2011-08-31 00:05:19

标签: jquery

好的,所以我想对搜索结果中的所有问题做相反的处理。大多数人都希望从嵌套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()方法。

5 个答案:

答案 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');
});

http://api.jquery.com/live/