javascript - 对 jQuery 插件的操作始终是最后的选择?

标签 javascript jquery plugins jquery-plugins contextmenu

我正在编写的插件是内部应用程序的右键单击上下文菜单,我不明白为什么会发生这种情况。

这是我的测试代码:

$('.item').rightClickMenu([
{
  icon:'http://cdn1.iconfinder.com/data/icons/silk2/exclamation.png',
  title:'Alert',
  action:function(){
    alert('Here is an example alert!');
  }
},
{
  icon:'http://cdn1.iconfinder.com/data/icons/silk2/error.png',
  title:'Console.Log',
  action:function(){
    console.log('Here is an example console.log()!');
  }
}
]);

相关的jQuery插件代码是:

for(x in items){
          $list.append('<li class="rightClickMenuOption'+x+'"><img src="'+items[x].icon+'">'+items[x].title+'</li>')
            .find('.rightClickMenuOption'+x)
              .bind('click',function(){
                items[x].action();
              });
        }

演示: http://jsbin.com/uxali4/3/

最佳答案

这将修复它:http://jsbin.com/uxali4/4/edit

您正在创建一个闭包。 for..in 循环中调用的所有方法都会将相同的父上下文从其 [[Scope]] 属性复制到内部 [[Scope]] 属性中。 strong>激活对象。因此,所有方法都访问相同的变量x。您需要调用另一个函数来解决此问题。

for(x in items){
      (function(index) {
        $list.append('<li class="rightClickMenuOption'+index+'"><img src="'+items[index].icon+'">'+items[index].title+'</li>')
          .find('.rightClickMenuOption'+index)
            .bind('click',function(){
              items[index].action();
            });
      }(x));
}

更新

看看http://jsperf.com/for-in-vs-for

这应该非常令人印象深刻地展示了 forfor..in 之间的速度差异

关于javascript - 对 jQuery 插件的操作始终是最后的选择?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4927664/

相关文章:

javascript - '从 jQuery 到 JavaScript 的转换'

c++ - 如何通过 SWIG 创建对已包装库的扩展?

jquery - jvectormap:如何在标记标签/工具提示中实现 HTML 而不是简单的字符串?

javascript - 导航栏在图像上下拉

javascript - 通过 InvokeScriptAsync 从 WebView 返回一个现有的 javascript 变量

javascript - Accordion 菜单第一张幻灯片默认无法关闭

javascript - eval() 的替代方案

grails - Grails-无法解决依赖关系

javascript - 无法将属性传递给 vue.js 中插槽中的组件?

JavaScript/jQuery 使用更多单词而不是 IndexOf - 聊天机器人