【问题标题】:Jquery $get / $ajax not working in all browsersJquery $get / $ajax 不适用于所有浏览器
【发布时间】:2012-12-09 04:06:55
【问题描述】:

我有如下代码:

$('a.load-more').on("click",function(){
    $.get($('a.load-more').attr('href'), function(data) {
   $(".next-page").remove();
   $('.block-grid').append(data);
   event.preventDefault();
});

html:

<li class="next-page">
<a href="http://example.com/ajax_all/" class="load-more">Load More →</a>
</li>

如您所见,它从 .load-more 元素中获取 ajax 内容的 url,将其传递给 $get 方法,然后该方法会拉入内容并将其附加到当前页面中。

但奇怪的是,这在 Chrome 中有效,但在 Firefox 或 Safari 中无效,并且这些浏览器的检查器中没有 js 错误。

而不是使用 ajax 拉取内容,它只是转到 url http://example.com/ajax_all/ 并显示该内容。

我很困惑为什么它可以在 Chrome 而不是 Safari 或 firefox 中工作。

【问题讨论】:

  • 您的代码缺少});

标签: jquery ajax cross-browser


【解决方案1】:

您的脚本无效,或粘贴错误

$('a.load-more').on("click", function () {
    $.get($('a.load-more').attr('href'), function (data) {
        $(".next-page").remove();
        $('.block-grid').append(data);
        event.preventDefault();

});

修复后显示您的event.preventDefault(); 发生在异步的get() 内部。

$('a.load-more').on("click", function () {
   $.get($('a.load-more').attr('href'), function (data) {
      $(".next-page").remove();
      $('.block-grid').append(data);
      event.preventDefault();
   });
});

preventDefault 放在回调之外应该可以解决您的问题。

$('a.load-more').on("click", function (e) {
    $.get($('a.load-more').attr('href'), function (data) {
        $(".next-page").remove();
        $('.block-grid').append(data);

    });
    e.preventDefault();
});

【讨论】:

  • 你不应该使用全局event对象,你应该使用传递给click事件的事件参数。
  • 太棒了!而已!!谢谢你:)
  • 嗯,现在这很奇怪。当该页面加载 ajax 内容时,它还会加载一个新的加载更多链接,该链接与初始链接完全相同。但是,这个新链接在单击时不会加载 ajax 内容,它只会转到 ajax 链接的 url。它使用 jquery "on" 所以不知道为什么会这样?
  • @John: .on 不会神奇地将事件委托给他人。要委托事件,请将其绑定到父级,并将元素作为参数传递:$('#container').on('click', 'a.load-more', function(){
  • @RocketHazmat 我最后选择了 $(document).delegate('.load-more',) 我猜这与你在那里的建议相似?它虽然有效,但我真的很高兴。非常感谢您的帮助:)
【解决方案2】:

你的问题是event这个词,一定是在点击回调的参数中。

试试看:

$('a.load-more').on("click", function(e){
    e.preventDefault();
    $.get($('a.load-more').attr('href'), function(data) {
        $(".next-page").remove();
        $('.block-grid').append(data);
    });
});

【讨论】:

  • 有些浏览器(IE 和 Chrome)有一个全局的 event 对象,有些则没有。所以,是的,请使用 jQuery 提供的事件对象。
  • 谢谢,如果上面的那个人没有先到,你就会被打勾。真的很感谢答案!
猜你喜欢
  • 1970-01-01
  • 2012-05-23
  • 1970-01-01
  • 1970-01-01
  • 2023-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-17
相关资源
最近更新 更多