javascript - 不能使用闭包权

标签 javascript jquery

我编写了 JS 函数,它必须根据数组中的值绑定(bind)它生成的按钮。 但它给了我最后的值(value)。我读到我必须使用闭包,我做到了,但我仍然无法正确绑定(bind)它们! 我还是初学者 我阅读了关于关闭的内容,我明白了,但仍然不知道我错过了什么

function addNewServices(newServicesArray){
    var j=0; var x;
    for (i in newServicesArray){
        var html='';

        html='<div style="width: 33%; float: leftt"><a href="#" data-role="button" data-icon="home" id="btn-'+newServicesArray[j].servicename+'" value="'+newServicesArray[j].servicename+'" class="ui-btn-up-c">'+newServicesArray[j].servicename+'</a></div>';
        $("#main-menu").append(html);


        $('#btn-'+newServicesArray[j].servicename).bind('click', function (){bindThis(j)});
        j++;
    }

    var bindThis = function( j ) {
        return function() {
            alert(j); // gives 2 always
            alert( newServicesArray[j].servicename ); 
        };
    };
}

最佳答案

您不必在循环中绑定(bind)点击...您可以通过函数中的 $(this) 获取点击的引用..

尽可能简单..

function addNewServices(newServicesArray){
   var j=0; 
   for (i in newServicesArray){
      var html='';

      html='<div style="width: 33%; float: left"><a href="#" data-role="button" data-icon="home" id="btn-'+newServicesArray[j].servicename+'" value="'+newServicesArray[j].servicename+'" class="ui-btn-up-c">'+newServicesArray[j].servicename+'</a></div>';

      $("#main-menu").append(html);


   }
}

$(function(){
  $(document).on('click','a[id^="btn-"]',function (){
      var $this = $(this);
      alert($this.attr('value')); 
  });
});

关于javascript - 不能使用闭包权,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14975940/

相关文章:

javascript - 对焦和模糊功能有问题

javascript - 我如何在两个选择标签之间连接

javascript - 单击我网站上的链接时如何停止在新选项卡中打开网页

javascript - 如何使用 jQuery Mobile 动态创建单选按钮?

javascript - 每 3 秒更改一次 div 类

javascript - 使用 XMLHttpRequest 查看网页中的网页

javascript - 渲染模板时插入额外字符

javascript - 我可以获得有关最多只能包含两 (2) 个连续重复字符的正则表达式的帮助吗?

javascript - jquery 禁用按钮,直到单击第一个按钮

javascript - 在javascript中将各种日期格式转换为yyyy-mm-dd