0

チェックボックスをクリックすると、自律機能を開始しています。並行して、同じ機能にバインドイベント (「キーアップ」) を追加していますが、機能していません。パラメータも送信できません..これを処理する正しいアプローチは何ですか..?

ここに私の機能があります:

var validateAltName = (function (info) {
    var altName = $.trim(altInput.value);
    console.log(altName); //only one time i am getting, not on keyup..
    if (!altName) {
        altInput.select();
        return;
    }

}());
$(altInput).on("keyup", validateAltName); //is there a way to send parameter?
4

3 に答える 3

3

関数を作成してすぐに呼び出すため、変数 validateAltName には実際には何も割り当てられません。これは関数の戻り値であるため、未定義のままです。

var validateAltName = (function (info) {
    var altName = $.trim(altInput.value);
    console.log(altName); //only one time i am getting, not on keyup..
    if (!altName) {
        altInput.select();
        return; // return 'undefined', which gets assigned to validateAltName
    }
    // if you fall off the end, it also returns 'undefined'
}()); // this _calls_ the function

周囲の括弧と末尾の () を削除します

var validateAltName = function (info) { // no opening paren
    var altName = $.trim(altInput.value);
    console.log(altName); //only one time i am getting, not on keyup..
    if (!altName) {
        altInput.select();
        return;
    }

}; // no () parens or closing )

編集:イベントが発生したときにこの関数にパラメーターを送信する場合は、それを呼び出すハンドラーに匿名関数を含めることができます。

// instead of
$(altInput).on("keyup", validateAltName); //is there a way to send parameter?
// you can use
$(altInput).on("keyup", function(e) {
    // by using .call() instead of direct invocation () you can preserve 'this'
    validateAltName.call(this, parm1, parm2);
}); //is there a way to send parameter?
于 2013-10-31T05:47:20.097 に答える
1

関数を実行し、結果を変数に格納するだけです。コードをこれに変更します

var validateAltName = function (info) {
    var altName = $.trim(altInput.value);
    console.log(altName); //only one time i am getting, not on keyup..
    if (!altName) {
        altInput.select();
        return;
    }

};
于 2013-10-31T05:47:30.807 に答える
0
var validateAltName = function (info) {
    var altName = $.trim(altInput.value);
    console.log(altName); //only one time i am getting, not on keyup..
    if (!altName) {
        altInput.select();
        return;
    }
};
$(altInput).on("keyup", validateAltName);
于 2013-10-31T05:55:47.073 に答える