【问题标题】:jQuery: Ajax firing only once even though binded with livequery()jQuery:即使与 livequery() 绑定,Ajax 也只触发一次
【发布时间】:2010-08-26 20:33:34
【问题描述】:

好的,所以,我使用 livequery() 将函数绑定到类 'ajaxLink' 的所有链接的单击事件。该功能完美触发......一次。在单击第一次成功调用 ajax 后,后续单击不会触发 ajax,这意味着(我猜)它们不再受 livequery() 代码的约束。

我看到其他有类似问题的人将他们的代码移到 ready() 函数之外,所以我尝试了,但无济于事(结果相同)。

$('a.ajaxLink').livequery('click', function(e) {
  e.preventDefault();
  var target = $(this).attr('href') + '&ajax=y';
  var x = $(this).html();

  $.ajax({
   type: 'POST',
   url: target,
   //data: str,
   success: function(msg) {
    $('#mainPanel').slideUp(500, function() {
     $(this).html(msg).slideDown(1000);
    });
   }
  });
 })

如果您需要更多详细信息,请告诉我。预先感谢您的帮助!这个网站很棒。

【问题讨论】:

  • 我正在查看插件页面,我真的想弄清楚是什么让 livequery 与原生 live 不同。你知道吗?
  • @Peter - .livequery() 积极寻找添加到 DOM 的元素,对于事件,它的效率较低,并且在 .live() 出现之前填补了一个空白。现在主要是用来运行插件之类的,.live(),被事件泡沫驱动,做不到。
  • rhbaum - 你使用的是什么版本的 jQuery?
  • 我的脚本标签指向'code.jquery.com/jquery-latest.pack.js'。

标签: jquery-plugins jquery livequery


【解决方案1】:

.livequery() 的问题取决于哪个版本和一些特殊的 DOM 案例。但是,你可以忽略这个问题......因为你正在做一些对事件有效的事情,你可以在这里使用内置的.live()(在 jQuery 1.3+ 中可用),如下所示:

$('a.ajaxLink').live('click', function(e) {
  e.preventDefault();

  $.ajax({
    type: 'POST',
    url: $(this).attr('href') + '&ajax=y',
    //data: str,
    success: function(msg) {
      $('#mainPanel').slideUp(500, function() {
        $(this).html(msg).slideDown(1000);
      });
    }
  });
});

【讨论】:

  • 工作,谢谢!好笑的是,我原来用的是live(),遇到了和上面描述的一样的问题,这才促使我去搜索并找到了livequery(),确实有用了一段时间。然后我不得不将我的网站切换到一个新域,并再次遇到问题。有趣的是,切换回 live() 最终解决了这个问题!再次感谢所有评论的人。
猜你喜欢
  • 2012-11-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-21
相关资源
最近更新 更多