重複の可能性:
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(){部分の開始直後、正しい要素があるように見える色あせの直前で、機能していません。
私はここで何か間違ったことをしていますか?このように動作するべきではありませんか?