使用 jQuery 循环设置事件函数触发器
set event function trigger in looping with jquery
我想问一些关于使用 jquery 设置事件触发器的问题。
首先,我有一个带有许多按钮的表单(btnadd1,btnadd2,btnadd3,...
我有这个代码:
for(i=1;i=<3;i++){
$('.btnAdd'+i).click(function(){
alert(i);
});
}
当我点击 btnadd1 时,代码应该是 alert(1),当我点击 btnadd2 时,代码应该是 alert(2),但问题是当我单击 Btnadd1、btnadd2 或 btnadd3 时,它会提醒"3"
我的假设是该函数覆盖了前一个函数。有人有解决这个问题的方法吗?
这是一个常见的闭包问题。您可以像这样解决它:
$('.btnAdd'+i).click(function(idx){
return function(){alert(idx);};
}(i));
吉斯菲德尔
该问题涉及内部循环的闭包。
最好在按钮中使用用户定义的属性,并使用单个类来绑定事件。 请参阅@bipen的答案。
<button class= "someclass" data-value="1"> click</button>
<button class= "someclass" data-value="2">click </button>
$('.someclass').click(function(){
alert($(this).attr('data-value'));
});
检查小提琴
http://jsfiddle.net/hoja/3jt5furd/5/
避免在循环中使用闭包...更好的是为所有按钮分配一个类并为此注册单个事件。利用数据属性。
$('.someclass').click(function() {
alert($(this).data('value')); //using jquery's data function
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button class="someclass" data-value="1">
button1
</button>
<button class="someclass" data-value="2">
button2
</button>
还有其他解决方案可以实现您想要的,使用属性选择器 [class^="btnadd"]
等等,但我认为这个解决方案更好且可读。
相关文章:
- 如何在更新面板内部调用/触发javascript函数<触发器>标签
- 从 blob 加载视频预览时的 Jquery 触发器函数
- 为什么当我使用初始化触发器函数时,我总是找不到脚本函数:发送发票如果新
- 我可以使用一个函数让所有复选框都被选中或取消选中吗(不使用点击触发器)
- Qinit触发器函数在JQuery DatePicker上不起作用
- 通过事件触发器/按钮单击将参数传递给 javascript 函数
- 有什么方法可以放置一个触发器来在 CodeIgniter 的控制器函数中切换引导模式
- 我应该返回假吗?每个需要触发器的函数
- 使用 jQuery 循环设置事件函数触发器
- 谷歌应用脚本以编程方式创建触发器,函数中的参数
- 使用事件触发器如何在输入更改时将值传递给函数
- 将参数传递给事件触发器中的函数调用
- JQuery :添加具有绑定/打开和触发器函数的确认处理程序
- 如何使用jquery从文本框中获取数据和触发器函数
- 测试具有触发器事件的函数
- jQuery 事件和函数触发器出现问题
- 在调用第二个函数后启用字段函数触发器
- AngularJS $watch 不等待触发器发生,而是在回调函数中执行$scope
- 如何使onEdit()触发器函数应用于多个工作表
- 回调设置变量晚于函数触发器