【问题标题】:jQuery preventDefault() even after .ajax()jQuery preventDefault() 即使在 .ajax() 之后
【发布时间】:2013-09-10 22:32:35
【问题描述】:

当使用

将 PHP 脚本拉入我的页面时
$.ajax({
    url: "/assets/inc/user-stream-list.php",
    success: function (data) {
        $(".user-stream-list").html(data);
    }
});

它产生<a>,我目前正在使用

$('.col-l .feed a').click(function(e){
    e.preventDefault();
});

要阻止链接能够被点击,但在我运行.ajax() 脚本后,链接变得可点击。

有没有办法防止在 ajax 运行后链接被点击?

【问题讨论】:

    标签: jquery


    【解决方案1】:

    click 事件委托给在进行 AJAX 调用之前存在的 DOM 更高层的元素。

    例如:

    $(document).on('click', '.col-l .feed a', function(e){
        e.preventDefault();
    });
    

    注意带有三个参数的.on() 方法如何将事件委托给document 元素,而不是将其直接绑定到尚不存在的a 元素。自然地,document 与 DOM 树一样高。但是,只要您事先知道他们存在,就可以使用更亲近的父母。

    【讨论】:

      【解决方案2】:

      由于 HTML 是通过 AJAX 加载的,如果你想将事件绑定到它,你需要将它们绑定到父级,使用 on,并在其上设置一个过滤器。

      $(".user-stream-list").on('click', '.col-l .feed a', function() {
       ...
      });
      

      编辑:live 已弃用。请改用on

      【讨论】:

      • 点击事件仍然发生
      【解决方案3】:

      使用带有加载图标的覆盖 div,以防止来自任何元素的点击事件...

      这里有一个例子: jQuery: How can i create a simple overlay?

      查看另一个示例: How can I create a "Please Wait, Loading..." animation using jQuery?

      【讨论】:

      • OP 并不意味着链接在 AJAX 请求期间处于活动状态,而是在 之后处于活动状态。
      猜你喜欢
      • 2013-05-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多