使用Jquery处理大量点击事件的更好解决方案
Better solution for dealing with large number of click events with Jquery
我的页面中有大量按钮,我想为每个按钮添加一个点击事件,也就是说,当用户点击按钮时,它会显示相应的按钮值。
我已经在匿名函数的帮助下实现了一个方法。我已经在下面包含了我的代码
HTML
<div id="div1"/>
Javascript
$(document).ready(function(){
for(var i =0;i<100;i++)
{
$("#div1").append("<input type='button' class='myclass' id='mybutton" + i + "' value='mybutton" + i + "'> ");
};
$(".myclass").click(function(e){
alert(e.target.id);
});
});
它运行得很好,问题是为这个表单上的每个按钮都创建了一个匿名函数,也就是说,如果我的页面中有10k个元素,那么匿名函数将创建10k次,i think i causes big memory wastage
有没有更好的方法来实现这一点?请帮我解决这个问题,任何帮助都将不胜感激。感谢
我认为可以使用事件委派来解决这个问题。
事件委派是一种通过单个公共父级而不是每个子级来响应ui事件的机制。
有关事件委派的更多信息,您可以参考此堆栈溢出问题
在您的情况下,最好使用事件委派
您可以使用以下代码
$(document).ready(function(){
for(var i =0;i<100;i++)
{
$("#div1").append("<input type='button' class='myclass' id='mybutton" + i + "' value='mybutton" + i + "'> ");
}
$("#div1").click(function(e){
if($(e.target).hasClass("myclass"))
alert(e.target.id);
});
});
你可以检查一下,我已经包含了一个DEMO的例子
或者您可以采用Chris的解决方案,它也可以很好地进行
您想要jQuery的on
函数,沿着这些行。。。
$("#containerdiv").on('click', '.myclass', function() {
alert($(this).id);
});
$(document).ready(function(){
var callback=function(){
console.log(this.id);
} ;
$('#div1').on('click','button.myclass',callback);
for(var i =0;i<100;i++)
{
$("#div1").append("<input type='button' class='myclass' id='mybutton" + i + "' value='mybutton" + i + "'> ");
};
});
this is called event delegation.
相关文章:
- 有没有更好的动手、具体的方法来学习Javascript
- 我能从“;输入“;事件是否有更好的方法来跟踪文本更改
- 什么对性能更好:每个元素的事件或一个具有委派的事件
- 使用Jquery处理大量点击事件的更好解决方案
- JavaScript 自定义事件或普通函数调用中哪个更好
- 我只为一个事件和一个元素写一个块更好吗?
- 有没有更好的方法将 jquery 事件处理程序包含在 xmlhttprequest() 中
- 更好的是:测试事件处理程序是否绑定或直接使用 .off()
- 调用JS函数或使用click事件更好
- 与许多事件侦听器和函数引用一个对象相比,什么是更好的方法
- 使用html元素或jquery事件的onclick属性更好
- 对自定义事件作出反应的更好方式
- 有没有更好的方法将菜单点击事件映射到它's对应的代码
- 哪个jquery事件可以更好地帮助我(onclick、hover?)
- 在jQuery中向后代元素添加事件的更好方法是什么?
- 哪个更好:使用触发事件的onclick或find元素来处理jQuery中的事件
- jQuery更好的事件
- 将事件放在JavaScript对象内部还是外部更好?
- 是使用onclick调用函数更好,还是使用.click绑定事件更好?
- 使用OOP创建带有事件的HTML对象的更好方法