首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >动态创建OnClick处理程序Jquery

动态创建OnClick处理程序Jquery
EN

Stack Overflow用户
提问于 2014-10-14 19:21:18
回答 4查看 60关注 0票数 0

我有4个css类,它们被命名为一种特定的方式: test-class-0、test-class-1、test-class-2、test-class-3,这样我就可以以编程方式注册自定义单击处理程序。

以下是我的尝试:

代码语言:javascript
复制
for(var i = 0; i < 4; i++) {
  $('.test-class-'+i).on('click', function(e){ alert(i); });
}

全演示:

代码语言:javascript
复制
for (var i = 0; i < 4; i++) {
  $('.test-class-' + i).on('click', function(e) {
    alert(i);
  });
}
代码语言:javascript
复制
<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的最新值,即4,当我希望在处理程序注册时使用i的值,所以当我分别单击test-class-0、1、2、3时,我会得到警报(0)、警报(1)、警报(2)和警报(3)。

注册单击处理程序时,是否可以锁定函数中的i值?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-10-14 19:24:35

代码语言:javascript
复制
for (var i = 0; i < 4; i++) {
  $('.test-class-' + i).on('click', {
    i: i
  }, function(e) {
    alert(e.data.i);
  });
}
代码语言:javascript
复制
<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>

票数 4
EN

Stack Overflow用户

发布于 2014-10-14 19:29:35

或者,您可以只使用一个事件处理程序,并在运行时解析类索引:

代码语言:javascript
复制
$('[class*="test-class-"').on('click', function() {
  var i = $(this).attr("class").replace("test-class-", "");
  alert(i);
});
代码语言:javascript
复制
<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>

票数 1
EN

Stack Overflow用户

发布于 2014-10-14 19:29:36

使用closure

代码语言:javascript
复制
for(var i = 0; i < 4; i++) {
  (function( i ) {
     $('.test-class-'+i).on('click', function(e){ alert(i); });
  })( i )
}
代码语言:javascript
复制
<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>

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26368684

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档