美文网首页
JS 用for事件绑定时数据需要注意的问题

JS 用for事件绑定时数据需要注意的问题

作者: 李逍遥JK | 来源:发表于2018-02-08 14:23 被阅读7次

很久之前就注意的问题了,今天记下来:

// data 待绑定事件数据
for(var i in data){
    var metaData = data[i];
    $('#meta-'+metaData.ID).click(function () {
            console.log(metaData);
    })
}

将一批按钮使用for循环绑定click事件,但是每次点击任何按钮,生效的效果是最后一个按钮的。经过分析,原因是:

点击按钮时候执行

// 方法体中没有metaData变量
function(){
    console.log(metaData)
}

此时方法体中没有metaData变量,所以回去外部方法中寻找,此时外部for循环已经结束。并且

metaData = data[i] // 此时 i = length

因为循环结束,此时 i = data.length;所以才会导致效果和预期不一致,每次生效都的是最后一个按钮的结果。

总结,click闭包中的函数被污染,所以此时我打算采用匿名函数,避免闭包中的变量被外界访问,并且可以减少变量重复带来的困惑
// 循环绑定事件
for(var i in data){
    var metaData = data[i];
    // 这里的 data = metaData 当然也可用其它名称
    (function(data){  
        $('#meta-'+data.ID).click(function () {
            // 点击的时候执行点击事件,此时函数体中无data,去外部函数寻找
            console.log(data);
        });
    })(metaData) // 将metaData 传入匿名函数 
}

相关文章

  • JS 用for事件绑定时数据需要注意的问题

    很久之前就注意的问题了,今天记下来: 将一批按钮使用for循环绑定click事件,但是每次点击任何按钮,生效的效果...

  • 微信小程序笔记

    初始化数据格式 变更设置数据 绑定事件 .js 文件中 绑定事件中,bind和catch 例子:快递单号查询 注意...

  • 拖拽------阻止浏览器默认事件

    用原生js写一个拖拽,需要考虑到兼容的问题,事件绑定的问题,浏览器默认事件的问题。首先需要用到Event 对象,代...

  • React基础第二节知识点

    1.绑定事件使用原生绑定事件onClick2.绑定事件函数必须传this(原生JS this作用域的问题)3.使用...

  • cocos creator动态添加点击事件

    游戏列表数据, 比如游戏背包, 排行榜等界面, 当需要给其中的项目添加点击事件时: 1.在 js 中绑定上点击事...

  • 2018-04-18事件

    添加(绑定)事件方式1:通过HTML标签事件属性(不建议使用) 方式2:通过JS代码:先获取需要绑定事件的元素,给...

  • js实现选项卡思路详解

    注意点 1、js中所有的事件绑定都是异步编程的,开始只是给元素的点击胸围绑定了一个方法,但是需要手动点击才会执行这...

  • 025 JS事件

    JS事件 ********* 一、事件的两种绑定方式 ******* 1、on事件绑定方式 2、非on事件绑定方式...

  • JavaScript事件

    事件分类 事件的绑定方法 通过标签绑定事件 通过js获取DOM元素绑定事件 通过addEventListener属...

  • Vue框架基础

    原生js与Vue框架的区别 用原生实现双向数据绑定 用Vue实现双向数据绑定 Vue是一个javaScript框架...

网友评论

      本文标题:JS 用for事件绑定时数据需要注意的问题

      本文链接:https://www.haomeiwen.com/subject/terttftx.html