栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

ajax调用后不会触发jQuery事件

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

ajax调用后不会触发jQuery事件

当您删除元素然后通过javascript替换它时,它会丢失页面加载时添加到该元素的所有事件绑定。

(这也适用于页面加载后添加到页面的内容,即ajax加载的内容)

有几种可能的解决方案。

1)封装您的“绑定”代码,并在页面加载时以及在有问题的元素添加回页面后立即调用它。例如:

$(document).ready(function(){    // bind event handlers when the page loads.    bindButtonClick();});function bindButtonClick(){    $('.myClickableElement').click(function(){        ... event handler pre ...    });}function updateContent(){    $.ajax({        url : '/ajax-endpoint.php',        data: {'onMyWay' : 'toServer'},        dataType : 'html',        type : 'post',        success : function(responseHtml){ // .myClickableElement is replaced with new (unbound) html element(s) $('#container').html(responseHtml); // re-bind event handlers to '.myClickableElement' bindButtonClick();          }    });}

2) 更优雅的处理方式
使用jQuery的.on()方法。有了它,您就可以将事件处理程序绑定到事件目标以外的元素上,即永远不会从页面中删除的元素。

$(document).ready(function(){    $('body').on('click','.myClickableElement',function(){        ... event handler pre ....    });});

一些进一步的解释:

.on()
方法使用事件委托
来告诉父元素保留事件处理程序代码(第3个参数),并在事件目标(第2个参数)执行某种类型的事件(第一个参数)时将其触发。

如果您使用的是1.7之前的jQuery版本,请使用现在不建议使用的委托方法,该方法实际上执行相同的操作。

另外,值得注意的是,由于事件在dom树中“冒泡”的方式,事件目标(.on()方法的第二个参数)必须是委托元素(jQuery对象的选择器)的后代。

以下将不起作用

<div id="container-1">    <div>        <div id="another-div"> Some Stuff        </div>    </div></div><div id="container-2">    <a id="click-me">Event Target!!!</a></div><script type="text/javascript">    $('#container-1').on('click','#click-me',function(){        ... event handler pre ....        // This will never execute, should've used '#container-2', or 'body', or 'document' instead of '#container-1'    });</script>

body
document
元素通常是安全的选择,因为通常每个页面上的元素的后裔。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/614770.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号