1

重複の可能性:
JS 変数の値 (参照ではない) を関数に渡すにはどうすればよいですか?

私はいくつかのリンク (var a[]) を onclick イベントと共に持っています。これはこれまでのところ、1 つの関数を使用するだけでうまく機能します。

function setCurrentImage(x) {
    return function() {
        alert("Image: "+x);
        return false;
    }
}

for(var i = 0; i < a.length; i++) {
    a[i].onclick = setCurrentImage(i);
}

問題は、2 つの関数が必要だということです。そして、このコードは機能しません:

function setCurrentImage(x) {
    return function() {
        alert("Image: "+x);
    }
}

function setCurrentNote(x) {
    return function() {
        alert("Note: "+x);
    }
}

for(var i = 0; i < a.length; i++) {
    a[i].onclick = function() {
        setCurrentImage(i);
        setCurrentNote(i);
        return false;
    }
}

このコードの何が問題になっていますか? 前もって感謝します :)

4

2 に答える 2

3

呼び出す各関数は関数を返しますが、実際には何もしません。
それらが返す関数を呼び出すことはありません。

それを修正すると、別の問題が発生します。すべてのインライン ハンドラが同じi変数を共有します。
それをIIFEでラップする必要があります。

于 2012-12-31T15:35:26.523 に答える
1

SLaks の回答を拡張するには:

function setCurrentImage(x) {
    alert("Image: "+x);
}

function setCurrentNote(x) {
    alert("Note: "+x);
}
function setOnclickHandler(x) {
    return function() {
        setCurrentImage(x);
        setCurrentNote(x);

        return false;
    };
}

for(var i = 0; i < a.length; i++) {
    a[i].onclick = setOnclickHandler(x);
}
于 2012-12-31T15:39:33.477 に答える