我未来追加的元素 是 ajax拼接的
我的on是这样写的
$("td").on("click","a",function(){
alert("Aha!");
});这是 页面的标签
<td><a class="topic_a" href="#creat" name='${data.context }'>选择</a></td>ajax拼接标签和上面标签一模一样的 。
但我拼接的标签点击没有效果。
为什么啊?
请确保 你用on绑定的时候 td 已经存在与dom中了..
还有..为什么live 可以 因为live 是绑定在docuement上的..任何时候 document都是存在的..
你用的on 你的事件是绑定在td上的..如果当td不存在的时候 肯定就绑定不上了
请多了解 事件代理机制.
用delegate来替换吧
未来追加的元素中包括 <td> 么?
包括 <td> 的话就不能在 $("td")上绑定事件代理。
应该在更上层的元素上绑定事件代理
比如<table>或者<table>的父元素
实在不行在body或者document上绑定也可以
如
$("body").on("click","a",function(){
alert("Aha!");
});用on bind 这种。
先拼接,然后添加到页面上,接下里在绑定事件。
js里面,一样是逐行读取的。
绑定事件写在前面,之后来添加的td,当然就不会有这个事件。
同时确保,td已经写入到页面当中。
live方法是旧版本的jquery才有,on方法只能使用在页面上已有的标签;
想获取未来元素,只能用delegate方法了,具体写法如下:
//div是页面已经有的元素,button是js生成的未来元素!
$("div").delegate("button","click",function(){
$("p").slideToggle();
}); $(document).on('click', 'td a', function() {
alert("Aha!");
}); $("body").delegate("td","click",function(){
alert("ok!");
});请确保 你用on绑定的时候 td 已经存在与dom中了..
还有..为什么live 可以 因为live 是绑定在docuement上的..任何时候 document都是存在的..
你用的on 你的事件是绑定在td上的..如果当td不存在的时候 肯定就绑定不上了
请多了解 事件代理机制.
你这样写吧
$("body").on("click","td a.topic_a",function(){
alert("Aha!");
});未来追加的元素中包括 <td> 么?
包括 <td> 的话就不能在 $("td")上绑定事件代理。
应该在更上层的元素上绑定事件代理
比如<table>或者<table>的父元素
实在不行在body或者document上绑定也可以
如
$("body").on("click","a",function(){
alert("Aha!");
});以上就是 jquery中live方法换on方法出现问题的解决办法详解的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号