【问题标题】:function.call() or click() [closed]function.call() 或 click() [关闭]
【发布时间】:2011-12-04 15:16:12
【问题描述】:

我目前正在使用 jQuery 开发一个菜单,它具有菜单项的键盘快捷键以及访问键。

我使用对象字面量传递数据来构建菜单,该字面量存储了要绑定到菜单项的函数,如下所示:

var my_menu = [
    { 
        label     : 'File',
        accessKey : 'F',
        func      : function() { alert('File shown'); } 
    }
];

我正在使用 jQuery 的 click() 函数将 func 函数绑定到菜单项(<li> 元素),类似于:

this_li.click(function() { this_click_func.call() });

然后我通过在document 上监听keydown() 添加键盘支持。如果组合键与accessKey 匹配,我只需使用jQuery 中的click() 方法来触发该功能,即使实际上他们并没有点击该项目。

这很好用,但我想对这种方法发表意见。当键的组合也匹配时运行该函数会更好吗,还是使用click()简单地复制一次点击就足够了?

感谢收到任何 cmets。

【问题讨论】:

  • “我做了这个,有什么想法吗?”无法回答
  • 这不是 JSON。那是一个 JavaScript 对象字面量。无论如何,这对于s.tk/review 来说可能是一个更好的问题。
  • 这是个吹毛求疵,但my_menu 不是 JSON:JSON 没有功能。这是一个javascript对象。也很挑剔,除非您需要更改函数签名,否则您可以简单地使用 this_li.click(this_click_func); 注册处理程序——不需要闭包。

标签: javascript jquery performance events


【解决方案1】:

您不应触发click() 处理程序,因为其他 组件/插件也可能订阅了click() 事件。

在您的 keydown() 处理程序中,您应该再次调用 this_click_func.call()

此外,你得到的是Object Literal Notation, not JSON

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-30
    • 1970-01-01
    • 2013-05-05
    • 1970-01-01
    • 2014-06-22
    • 2018-11-01
    • 1970-01-01
    相关资源
    最近更新 更多