2017-02-10 9 views
1

にアクセスすることはできません、それはjQueryの簡単UI、ループ内の関数は、ループスコープ変数

に基づいており、ここであなたのセットアップあれば問題はメニューであるHTMLコード

<div id="menu" class="easyui-menu" style="width:120px;"> 
    <div>New</div> 
    <div> 
     <span>Open</span> 
     <div style="width:150px;"> 
      <div><b>Word</b></div> 
      <div>Excel</div> 
      <div>PowerPoint</div> 
     </div> 
    </div> 
    <div data-options="iconCls:'icon-save'">Save</div> 
    <div class="menu-sep"></div> 
    <div>Exit</div> 
</div> 

であると仮定するループで、常に最後の文によってトリガ機能、すなわちi常にconsole.log(itemLabel + i + "is selected.");

$(function(){ 
    var jqMenu = $("#menu"); 
    for (var i = 0; i < 5; i++) { 
    var itemLabel = "item " + i; 
    // correct 
    var onclickFunction = function(){ 
     console.log(itemLabel + i + "is selected."); 
    } 

    jqMenu.menu("appendItem",{ 
     "text":itemLabel, 
     "onclick": function(){ 
     console.log(itemLabel + " is selected."); 
     } 
    }); 
    } 
}) 
$(document).bind('contextmenu',function(e){ 
       e.preventDefault(); 
    $("#menu").menu('show', { 
     left: 200, 
     top: 100 
    }); 
}); 

答えて

0

4にあなたがABに直面している問題に等しいです。クローズを使用して解決することができます。私はこの挑戦を一度受けて、クロージャを使って解決しました。

これに合わせてコードを変更してください。コードでこの形式を使用してみてください。

for (var i = 0; i < 5; i++) { 
    (function(x){ 
     console.log(x); 
    })(i); 
} 
0

うん、クロージャを作成する機能を使用して、この答えをチェックアウトも、役立つだろう:https://stackoverflow.com/a/3572616/883571個人的に

私はこの問題を回避するためにforEachを使用することをお勧めします:

[1,2,3,4,5].forEach(function(i) { 
    console.log(i) 
}); 
関連する問題