javascript - 使用 AJAX 加载页面两次会导致 .on ('click' ) 停止运行

标签 javascript jquery ajax

所以我有一个使用 AJAX 加载的页面,页面如下:

<script>
$(document).ready(function(e){
    console.log('binding clickable');
    console.log($('#clickable').length);
    $('#clickable').off();
    $('#clickable').on('click',function(){
        console.log('hello');
    });
});
</script>
<h1>New Page</h1>
<p>Blah blah blah...</p>
<div class="button" id="clickable">OK</div>

因此,当我使用 AJAX 加载此页面时,它工作正常。

当我加载这个页面,然后加载另一个页面,然后再次加载这个页面时,它工作正常。

但是,当我加载此页面,然后再次加载此页面时 - #clickable 按钮不再起作用。

当我查看控制台时,我可以看到 binding clickable,因此 $(document).ready() 函数运行正常。在控制台的下方,我可以看到数字 1,所以我知道 jQuery 选择器 '#clickable' 可以正常找到 DOM 元素。

我添加了行 $('#clickable').off() 以防事件被绑定(bind)到 DOM 元素两次。但这没有帮助。

我使用标准的 $.ajax({type:'GET',dataType:'text'}); 调用加载页面,这段代码工作正常。问题不在于我们如何通过 AJAX 加载页面,问题在于页面加载两次导致 .on('click') 函数停止工作。

我们已经通过使用 PHP 将随机字符串添加到按钮标记 id 和 jQuery 选择器的末尾解决了这个问题,所以我假设为每个页面加载使用相同的选择器是问题,但我希望有更多知识的人可以阐明这种情况。

  • 谁能给我解释一下,为什么第二次加载页面时按钮无法点击?

最佳答案

尝试事件委托(delegate),语法为:

$( "body" ).on( "click", "#clickable", function( event ) { /*do something*/ });

更多信息 here

关于javascript - 使用 AJAX 加载页面两次会导致 .on ('click' ) 停止运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21626858/

相关文章:

javascript - 使用 JavaScript Switch Case 时遇到问题

javascript - 如何建立具有youtube视频的视频播放列表?

javascript - Jquery JSON .each() 在 Google Chrome 中不起作用

javascript - ajax调用后无法调用jquery

javascript - 在没有 Web 服务器的情况下使用 Javascript 加载本地文件

javascript - 将叠加层滑出屏幕

javascript - 将 Gulp 与 Django manage.py 集成

javascript - jquery ajax 表单提交的 Chrome 数据压缩代理错误

jQuery 和异步调用

javascript - 正则表达式插入 html 标签而不创建无效的 html