【问题标题】:Pass Data to Event Handler via dispatchEvent or HTMLElement.click通过 dispatchEvent 或 HTMLElement.click 将数据传递给事件处理程序
【发布时间】:2015-08-17 19:49:08
【问题描述】:

有没有办法使用EventTarget.dispatchEvent() 或HTMLElement.click() 将数据传递给事件处理程序?

http://jsfiddle.net/yq7yqpL8/1/

var button = document.getElementById('button');

button.addEventListener('foobar', function() {
    console.log(arguments); // [Event]
});

button.addEventListener('click', function() {
    console.log(arguments); // [MouseEvent]
});

button.click({ foo: 'bar' });

var event = document.createEvent('HTMLEvents');
event.initEvent('foobar', true, false);
button.dispatchEvent(event, { foo: 'bar' });

【问题讨论】:

标签: javascript


【解决方案1】:

这应该使用 jquery 回答您的问题:

button.bind('click', { name: 'something' }, function(event) {
    alert(event.data.name);
});

另请参阅:http://api.jquery.com/event.data/

【讨论】:

    【解决方案2】:

    我认为您正在寻找的是自定义事件,可以像这样附加自定义参数:

    //Listen for the event
    window.addEventListener("foobar", function(evt) {
        alert(evt.detail);
    }, false);
    
    //Dispatch an event
    var evt = document.createEvent("CustomEvent");
    evt.initCustomEvent("foobar", true, true, "Object");
    window.dispatchEvent(evt);
    

    阅读here

    【讨论】:

    • 感谢您的回复;确认这适用于foobar 事件:jsfiddle.net/yq7yqpL8/3。有没有办法为原生 UI 事件传递数据,比如点击?
    • 也许this 在这种情况下会帮助你。如果对您有帮助,请将答案标记为已解决。
    猜你喜欢
    • 1970-01-01
    • 2012-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-30
    相关资源
    最近更新 更多