このHTMLを検討してください。
<p>Click me</p>
それぞれにクリックハンドラーを使用してオブジェクトを作成したいのですがp
、クリックハンドラー関数が見つからないという問題が発生しました。
このコードは機能しません:
(function(){
var self = this;
$("p").each(function(){
$(this).click(self.myFunction);
});
self.myFunction = function(){ alert("myFunction"); }
})();
クリックハンドラーの割り当てを関数でラップすると、機能します。
(function(){
var self = this;
$("p").each(function(){
$(this).click(function(){ self.myFunction(); });
});
self.myFunction = function(){ alert("myFunction"); }
})();
質問:なぜ機能しない$(this).click(self.myFunction)
の$(this).click(function(){ self.myFunction(); })
ですか?
編集:次のコードは機能します:
$("p").click(myFunction);
function myFunction(){ alert("myFunction"); }
これも失敗するべきではありませんか?
PS関数の場所を移動することで、関数をラップする必要なしにオブジェクトを機能させることができました。
(function(){
var self = this;
self.myFunction = function(){ alert("myFunction"); }
$("p").each(function(){
$(this).click(self.myFunction);
});
})();
問題はパーサーに関連していると思います。