动态创建OnClick处理程序Jquery
Dynamically Created OnClick Handlers Jquery
我有4个css类,它们以特定的方式命名:test-class-0、test-class-1、test-cclass-2和test-class-3,这样我就可以以编程方式注册自定义点击处理程序。
这是我的尝试:
for(var i = 0; i < 4; i++) {
$('.test-class-'+i).on('click', function(e){ alert(i); });
}
完整演示:
for (var i = 0; i < 4; i++) {
$('.test-class-' + i).on('click', function(e) {
alert(i);
});
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="test-class-0">TEST 1</div>
<div class="test-class-1">TEST 2</div>
<div class="test-class-2">TEST 3</div>
<div class="test-class-3">TEST 4</div>
然而,当事件被注册时,当我希望在处理程序注册时使用i的值时,处理程序将始终使用i的最新值,即4,所以当我分别单击test-class-0、1、2、3时,我会得到alert(0)、alert(1)、alert(2)和alert(3)。
有没有一种方法可以在注册点击处理程序时锁定函数中I的值?
for (var i = 0; i < 4; i++) {
$('.test-class-' + i).on('click', {
i: i
}, function(e) {
alert(e.data.i);
});
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="test-class-0">TEST 1</div>
<div class="test-class-1">TEST 2</div>
<div class="test-class-2">TEST 3</div>
<div class="test-class-3">TEST 4</div>
或者,您可以只使用一个事件处理程序,并在运行时解析类索引:
$('[class*="test-class-"').on('click', function() {
var i = $(this).attr("class").replace("test-class-", "");
alert(i);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="test-class-0">TEST 1</div>
<div class="test-class-1">TEST 2</div>
<div class="test-class-2">TEST 3</div>
<div class="test-class-3">TEST 4</div>
使用闭包:
for(var i = 0; i < 4; i++) {
(function( i ) {
$('.test-class-'+i).on('click', function(e){ alert(i); });
})( i )
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="test-class-0">TEST 1</div>
<div class="test-class-1">TEST 2</div>
<div class="test-class-2">TEST 3</div>
<div class="test-class-3">TEST 4</div>
您可以尝试使用这个而不是for:
$('*[class*="test-class-"]').each(function(i) {
$(this).on('click', function() {
alert(i + 1)
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="test-class-0">TEST 1</div>
<div class="test-class-1">TEST 2</div>
<div class="test-class-2">TEST 3</div>
<div class="test-class-3">TEST 4</div>
相关文章:
- 用程序搜索JQuery数据表中的文本
- 页面加载之前的jQuery Ajax加载程序
- 使用jquery.load('pageName')方法时,未从应用程序缓存加载Html页
- iPhone应用程序jquery中的滑块导航菜单
- 引导程序jquery文件上传和laravel
- JavaScript事件处理程序jQuery
- 构建我的第一个Javascript应用程序(jQuery),努力做一些事情
- 电子应用程序 Jquery 模块未加载
- Rails 应用程序 - jQuery Document.ready在单击链接时不调用,但在新选项卡中打开或刷新时工作
- 将自定义类添加到bootbox引导程序jquery插件中的警报对话框中
- 动态创建OnClick处理程序Jquery
- 如何在form.submit处理程序(jquery)中的异步回调中触发表单提交
- 全局ajaxError处理程序jquery.Jquery网站上的
- Chrome应用程序jquery AJAX请求未发送自定义标头
- 不能使用off()关闭动态列表事件处理程序的事件处理程序(jquery)
- 如何在blueimp上使用自己的文件处理程序jQuery文件上传
- 触摸设备,单点和双击事件处理程序jQuery/Javascript
- 使用jQuery事件处理程序- jQuery新手
- 不能在事件处理程序(jquery)中传递show()方法
- 从单击事件处理程序 (jquery) 中排除元素