0

重複の可能性:
jQuery/JavaScriptの「this」ポインターの混乱

var timeOut = 1000;

$('#'+form +' :input').each(function() {

    thisObj = "";
    if ($(this).parent().parent().find(".incorrect").css('display') == "inline-block" || $(this).attr('value') == "") {
        if ($(this).attr('id') != "submitbtn") {
            thisObj = $(this);
            submit_this++;
            colourfading(this, 'rgba(56, 183, 0, 1)', 'rgba(255, 30, 0, .2)', 'rgb(210,210,210)', 'rgb(250,250,250)');
        }
    }

    var delaySubmit = (function(){
        var timer = 0;
        return function(callback, ms){
            setTimeouts(callback, ms, thisObj);
        };
    })();

    delaySubmit(function(){
        do_sendRequest(ajaxObj, thisObj, true);
    }, timeOut );
    timeOut = timeOut + 1000;
});

これは、フォームの送信ボタンを押すときに使用するコードです。

関数colourFadingが"...(this、'..."を使用していることがわかります。this要素は'.each(function(){'呼び出しからの入力要素です。

私が書いたカラーフェード関数では完璧な仕事をしています。各入力要素は、何か問題があることを示す素敵な赤い色になり、その後白にフェードバックします。

今、「楽しい」部分が来ます。ご覧のとおり、「thisObj」変数を同じ「this」としてリンクしました。これはcolourFadingに渡されます。

それでも、thisObjの.attr('id')を見ると、'this'が実際にクリックした送信ボタンの表現であることがわかります。

これは非常に奇妙です。なぜなら、(colorfading関数で)colorfadingに送信されている'this'からidを要求すると、入力要素のidがうまく表示されるからです。

thisObj = this、thisObj = $(this)を設定してみましたが、.each(function(){部分の開始直後、正しい要素があるように見える色あせの直前で、機能していません。

私はここで何か間違ったことをしていますか?このように動作するべきではありませんか?

4

0 に答える 0