0

匿名関数を削除して関数を直接呼び出すと、パラメーターがない場合にのみ機能します。

動作します。パラメータを使用して、無名関数内で:

$(document).ready(function () {
    $('#someId').on('click', function () {
        setAllOn(checkOn)
    });
});
function setAllOn(checkOn) {
    $("#someId2 input[name='someName']").attr('checked', checkOn);
}

動作します。無名関数なしで、パラメータなしのみ:

$(document).ready(function () {
    $('#someId').on('click', setAllOn);
});
function setAllOn() {
    $("#someId2 input[name='someName']").attr('checked', true);
}

動作しないでください。パラメーターが追加されましたが、機能しなくなりました。

$(document).ready(function () {
    $('#someId').on('click', setAllOn(true));
});
function setAllOn(checkOn) {
    $("#someId2 input[name='someName']").attr('checked', checkOn);
}
4

1 に答える 1

2

onコールバック、つまりイベントが発生したときに呼び出される関数を渡す必要があります。

setAllOn関数です。それが機能する理由です。

function () { setAllOn(checkOn) }まだ関数です。

setAllOn(true)function を呼び出した結果ですsetAllOn。何も返さないので、結果はundefinedです。これは関数ではありません。

機能を再利用したい場合setAllOn。高階関数を定義して、引数を取り、 の「カリー化」バージョンを返すことができますsetAllOn

function setAll(checkOn){
    return function(){ return setAllOn(checkOn);}
}

function setAllOn(checkOn) {
    $("#someId2 input[name='someName']").attr('checked', checkOn);
}

$(document).ready(function () {
    $('#someId').on('click', setAll(true));
});
于 2013-10-16T09:37:28.747 に答える