将参数传递给bind()时事件丢失

时间:2019-07-12 06:27:51

标签: javascript

我正在尝试将callbackevent绑定,但是在传递callback时丢失了事件。这是我的密码

HTML:

<button id="click">click</button>

JavaScript:

<script>
    class T {
        handler (e, c) {
            console.log(e)
            console.log(typeof c)
            //c(e)
        }

        run () {
            document.getElementById('click').addEventListener('click', this.handler.bind(this, e => {
                console.log(e)
            }))
        }
    }

    (new T).run()
</script>

当我不通过callback时,event被正确记录。这里的代码

handler (e) {
   console.log(e)
}

run () {
  document.getElementById('click').addEventListener('click', this.handler.bind(this))
}

现在,如何将eventcallback都传递给处理程序?

3 个答案:

答案 0 :(得分:1)

您同时获得了回调和事件。像这样修改代码,您会看到调用了回调。您的第一个参数是回调,第二个是事件。

class T {
        listener (e, c) {
            console.log(e);
            console.log(typeof c);
			e();
            //c(e)
        }

        run () {
            document.getElementById('click').addEventListener('click', this.listener.bind(this, e => {
                console.log('I am called');
            }));
        }
    }

    (new T).run();
<button id="click">click</button>

您将看到调用了回调,并且看到了“我被呼叫”。 但是,您应该修改参数以正确命名它们。 e,第一个参数看起来不像回调,而第二个参数类似。

答案 1 :(得分:0)

我不会绑定函数,而是这样做:[..].addEventListener('click', event => this.listener(event, cb))

在这里查看原因:Event Listener in Class Context

答案 2 :(得分:0)

function handleClickListener(e, callback) {
  console.log('clicked');
  callback(e);
}

function startListener() {
  document.addEventListener('click', e => handleClickListener(e, (e) => console.log(e)));
}

startListener()