我正在开发一个chrome扩展来自动化网站的各个部分。我需要触发链接的click事件。它有一个通过像这样的匿名函数的事件处理程序......
(function($, dialog) {
function toggle(event) {
}
function addEventListeners() {
form.on('click', '.toggle', toggle);
}
function init() {
}
$(init);
}(jQuery, window.silk.classes.dialog));
传统方法,如$('#elm')。click(),trigger(),triggerHandler()等不起作用。我想我需要在匿名插件中引发toggle()函数。
我可以弄清楚如何通过扩展来触发它,如果有人可以帮我弄清楚如何通过控制台触发处理程序。
感谢您的投入。
答案 0 :(得分:0)
如果没有明确调用function functionName(){}
,则不会调用javascript中functionName()
块内包含的任何内容。
通常对于annon init函数我会这样做:
(function(params){
toggle();
addEventListeners(); //should change this it's bad to name functions after language defined ones.
init();
})();
function toggle(params){
}
function addEventListeners(){
}
function init(){
}
您在上面的示例中编写代码的方式,addEventListener
中的代码将永远不会运行,因为它从未被调用(据我所知,您可以看到)。
如果你想按照它的方式保持它,你必须从你的annon函数内部调用函数,因为范围:
(function($, dialog) {
function toggle(event) {
}
function addEventListeners() {
form.on('click', '.toggle', toggle);
}
function init() {
}
toggle();
addEventListeners();
init();
}(jQuery, window.silk.classes.dialog));
//your functions are now out of scope here, however any eventListeners you attach to the dom will stay defined until that dom element is destroyed.
答案 1 :(得分:0)
我设法搞清楚了。在一天结束时,我试图在匿名函数中触发处理程序。以下代码行为此服务。
var btn = document.getElementById('toggle');
btn.addEventListener('click', function() {
this.removeEventListener('click', arguments.callee, false);
}, false);
var event = document.createEvent('Event');
event.initEvent('click', true, true);
btn.dispatchEvent(event);