登陆

javascript - addEventListener怎么动态传入带参数函数?

有个未采纳的「潇潇雨歇」的答案,也有用,只是我现在还不知道let的具体用法。在此表示歉意,我也好想采纳两个。

结果肯定是
click button1 alert(3)
click button2 alert(3)

怎么修改代码使得
click button1 alert(1)
click button2 alert(2)

感觉这个问题跟settimeout的闭包经典问题有点像,但是我又想不到什么解决办法。

求指点。

# JavaScript
phpcn_u1582phpcn_u15821819 天前400 次浏览

全部回复(5)我要回复

  • phpcn_u1582

    phpcn_u15822017-05-18 10:52:01

    function myclick(i){
        return function(){
             alert(i)
        }

    第二个参数传myclick(i)

    回复
    0
  • PHPzhong

    PHPzhong2017-05-18 10:52:01

    把参数保存在每个button元素的属性里。
    或者用let

    回复
    0
  • 我想大声告诉你

    我想大声告诉你2017-05-18 10:52:01

    <button id='myButton1' data-info='abc'></button> 点击按钮后,获得button的属性data-info中的属性

    回复
    0
  • 曾经蜡笔没有小新

    曾经蜡笔没有小新2017-05-18 10:52:01

    jquery一般来说就是操作DOM,渲染的时候拼接在dom上一般是data-*的格式,然后获取出来再用$(this).attr(key)

    回复
    0
  • 过去多啦不再A梦

    过去多啦不再A梦2017-05-18 10:52:01

    将var 改为 let 即可

     window.onload = function () {
          for (let i = 1; i < 3; i++) {
            document.getElementById('myButton' + i)
              .addEventListener('click', () => {
                myClick(i)
              })
          }
        }

    回复
    0
  • 取消回复发送