1

こんにちは、解決策が見つからない非常に具体的な問題があります: HTMLファイルの順序付けられていないリストにリスト項目を作成し、マウスイベントとフィールドのIDをパラメータとして渡すonmousedown関数を追加しようとしています

for (var i=0;i<10;i++){
$('ul').append('<li id='+i+'>text</li>');
$(i).on('mousedown', function(event){ Callfunction(i,event);});
}

Callfunction(i, event){
alert(i,' ',event);
}

残念ながら、各関数によって最大イテレータ(i=9)のみが渡されます。これは、どのように機能するかに関係していると思います.on()。回避策はありますか?おそらく、パラメータ i を強制的Callfunction(i,event);に実際の文字列にすることでしょうか?

後でクリック機能を削除できるようにする必要があるため、.on() または .bind() を介して関数を実装する必要があります。まだまだ初心者なので、なるべくシンプルにお願いします。ありがとう編集:タイプミス

4

1 に答える 1

1

スコープの問題、クロージャーを使用できます:

for (var i = 0; i < 10; i++) {
    $('ul').append('<li id="' + i + '">text</li>');
    (function (i) {
        $('#' + i).on('mousedown', function (event) {
            Callfunction(i, event);
        });
    })(i);
}

function Callfunction(i, event) {
    alert(i, ' ', event); // better is to use console.log() instead of alert()
}
于 2013-07-16T11:39:29.660 に答える