【问题标题】:jQuery - How to include a variable in a click function [duplicate]jQuery - 如何在点击函数中包含变量[重复]
【发布时间】:2014-12-17 20:57:17
【问题描述】:

我有以下功能:

getAccessPointArray()
    .done(function(array) {

        var obj = JSON.parse(array);

        for ( i = 0; i < obj.data.length; i++ ) {

            var identifier = obj.data[i]['identifier'];
            var url = obj.data[i]['url'];

            $( "." + identifier ).click(function() {
                alert("This is the URL: " + url );   
            });

        }

    }
);

我的数组:

obj = array( 'data' =>
['url' => url 1, 'identifier' => ident 1] , 
['url' => url 2, 'identifier' => ident 2]
);

似乎发生的事情是在第一次传递时设置了 url,但是在第二次传递时它不会覆盖第一个 url...

所以我的输出是:

This is the URL: url 1
This is the URL: url 1

不确定我在这里做错了什么?

【问题讨论】:

  • so my output is: This is the URL: url 1你确定吗?
  • 不是 100% 说实话,一次只有一个单击事件有效,当我重新测试时,似乎循环在所有迭代的单击事件之外运行,然后触发完成后关闭点击事件,将变量设置为循环中的最后一个 url,因此无论我点击哪个事件,都会提醒相同的 URL...
  • 是的,最后一个 url,不是你发布的第一个 ;)

标签: jquery


【解决方案1】:

您需要关闭 i 变量。你可以用 IIFE 来做到这一点

(function(i){
 var identifier = obj.data[i]['identifier'];
 var url = obj.data[i]['url'];

 $( "." + identifier ).click(function() {
  alert("This is the URL: " + url );   
 });
}(i)

这是一个堆栈片段演示

var obj = {
 data : [
  { 
   url : 'world',
   identifier : 'hello'
  },
  {
   url : 'polo',
   identifier : 'marco'
  }
 ]
};
for ( var i = 0; i < obj.data.length; i++ ) {
 (function(i){
  var identifier = obj.data[i]['identifier'];
  var url = obj.data[i]['url'];

  $( "." + identifier ).click(function() {
    alert("This is the URL: " + url );   
  });
 })(i)
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div>
  <div class="hello">
   Hello  
  </div>
  <div class="marco">
   Marco 
  </div>
</div>

【讨论】:

  • 啊,这是一种享受,非常感谢。对 jQuery 来说非常新,目前有很多试验和错误。
【解决方案2】:

您可能已经尝试过了,但以防万一。分配给click()后尝试重置url和标识符

var identifier;
var url;
for ( i = 0; i < obj.data.length; i++ ) {
     identifier = obj.data[i]['identifier'];
     url = obj.data[i]['url'];

    $( "." + identifier ).click(function() {
         alert("This is the URL: " + url );   
    });

    identifier = '';
    url = '';
}

【讨论】:

    猜你喜欢
    • 2021-06-20
    • 2010-12-01
    • 2015-04-07
    • 1970-01-01
    • 2014-09-30
    • 2012-10-12
    • 2016-04-03
    • 2023-04-03
    • 2022-10-03
    相关资源
    最近更新 更多