0
for (var i = 0; i < 10; i++) {
    array.push($("<a href=\"#\" data-role=\"button\" data-inline=\"true\">" + i + "</a>"));
    $("#row").append(array[i]);
    array[i].click(function () {
        changeval(i);
        console.log(i);
    });
}

私の問題は、関数 changeval(i) が常に i の同じ値 10 になることです。この for ループで onclick-function を使用してボタンを作成しようとしています。ヒントが必要です。

4

3 に答える 3

3

ボタンの最初の追加と「クリック」アクションを分けます。

for (var i = 0; i < 10; i++) {
    array
            .push($("<a href=\"#\" data-role=\"button\" data-inline=\"true\">"
                    + i + "</a>"));
    $("#row").append(array[i]);
    array[i].click(function() {
        changeval(i);
        console.log(i);
    });
}

次のように分割されます。

for (var i = 0; i < 10; i++) {
    array.push("<a href=\"#\" data-role=\"button\" data-inline=\"true\">"
                    + i + "</a>");
    $("#row").append(array[i]);
};

$('#row').on('click', 'a', function() { 
    changeVal($(this).text());
    console.log($(this).text());
};

また、javascript 内の変数と関数は CamelCaseForBetterReadability で記述する必要があることに注意してください。また、配列項目を囲む $() を削除したことにも注意してください。最後に、文字列内の引用符をエスケープしたくない場合は、単一引用符を使用できます。

于 2013-10-11T17:55:09.700 に答える
1

JS クロージャーを調べてください。値はiループの最後の反復に設定されます。iそれをパラメーターとして自己実行関数でラップします。

for (var i = 0; i < 10; i++) {
    (function(i) {
        array
            .push($("<a href=\"#\" data-role=\"button\" data-inline=\"true\">"
                    + i + "</a>"));
        $("#row").append(array[i]);
        array[i].click(function() {
            changeval(i);
            console.log(i);
        });
    })(i)
}
于 2013-10-11T17:52:35.143 に答える
0

クロージャーを使用します。

for (var i = 0; i < 10; i++) {
    (function(i) {
        array[i].click(function() { . . . } );
    )(i);
}

jQueryを使用している場合(使用している場合はそのようです.click:)使用できます

http://api.jquery.com/jQuery.each/

要素をループして、これと同じ機能を実現します。

于 2013-10-11T17:52:30.907 に答える