回调没有正确调用数组函数

时间:2013-02-05 02:31:04

标签: javascript jquery

我正在使用用户脚本为用户创建可点击链接的菜单。这些条目最初存储在数组中,然后迭代数组,并将函数添加到.click回调中。

这就是菜单的构建方式:

registerMenuCommand('Options', function() { DisplaySlideMenu(true); });

function registerMenuCommand( oText, oFunc ) {
    falsifiedMenuCom[falsifiedMenuCom.length] = [oText,oFunc];
}

我可以使用标准的javascript和代码成功添加和执行菜单命令,如下所示:

for( var i = 0; GM_falsifiedMenuCom[i]; i++) {
    var menuEntry;
    mdiv.appendChild(menuEntry = document.createElement('a'));
    menuEntry.setAttribute('href','#');
    menuEntry.onclick = new Function('falsifiedMenuCom['+i+'][1](arguments[0]); var e = arguments[0]; e.stopPropagation(); return false;');
        menuEntry.appendChild(document.createTextNode(falsifiedMenuCom[i][0]));
}

但我决定尝试将其转换为jQuery(以便事情看起来更漂亮),我看起来像这样:

for( var i = 0; falsifiedMenuCom[i]; i++) {
    var mEntry = $('<a href="#">' + falsifiedMenuCom[i][0] + '</a>');
    mEntry.click(function () { debugger; falsifiedMenuCom[i][1](arguments[0]); var e = arguments[0]; e.stopPropagation(); return false; });
    mdiv.append(mEntry);
}

当然它不起作用。一切都被正确添加到菜单中,但是当我点击其中一个条目时,.click被调用,我收到错误Uncaught TypeError: Cannot call method '1' of undefined。这是有道理的,因为所有菜单的.click函数都是falsifiedMenuCom [i] 1和i == falsifiedMenuCom.length,它超过了数组的末尾。我理解为什么会这样,但无论如何都要让.click函数实际获取falsifiedMenuCom [i] [1]的实际数组值而不仅仅是尝试调用falsifiedMenuCom [i] [1]本身?我应该坚持使用普通的旧javascript吗?

0 个答案:

没有答案