あなたの例に基づいて、これを行う理由はありません。
しかし、それがあなたに役立つ状況はありますが、その一部は使用法に惑わされることがあります。上記で
すなわち
$('a.go').click(function(e)
{
e.preventDefault();
if(!$(this).hasClass('busy'))
{
$(this).addClass('busy');
$.ajax(
{
success : function(resp)
{
$(this).removeClass('busy');
},
error : function()
{
$(this).removeClass('busy');
}
});
}
});
スコープが失われているとして、成功とエラーコールバック内$(this)
は、あなたがクリックしたリンクに反映されません。この問題を回避するには
、あなたのコード例でvar self = $(this)
すなわち
$('a.go').click(function(e)
{
e.preventDefault();
if(!$(this).hasClass('busy'))
{
$(this).addClass('busy');
var btn = $(this);
$.ajax(
{
success : function(resp)
{
btn.removeClass('busy');
},
error : function()
{
btn.removeClass('busy');
}
});
}
});
は、コンストラクタで実行setTimeoutをしていますか?それともクラスの方法ですか? – ozz
@ozz:['window.setTimeout'](https://developer.mozilla.org/ja/DOM/window.setTimeout)のドキュメントを参照してください。提供された関数の実行を指定されたミリ秒数だけ遅延させます。 – Matt
もちろん、setTimeoutではパラメータを渡すこともできます。すなわちhttp://jsfiddle.net/gRoberts/rYB3f/あなたの例では 'this'を' self'を再宣言する必要がなくなります。 – Gavin