それぞれがSPANである.bulletを持つオブジェクトのリストがあります。jQueryを使用してスパンで特定のアクションを実行するよりも、スパンのクリックをハンドラーにバインドしたいと思います。わからない行動が見られるので、誰かが何が起こっているのか説明してくれることを願っています。基本的に、この最初のコード例は機能します。
for (var i = 0 ; i< length ; i++) {
(function(){
dataNode = dataNodeList[i];
var handler = function(e) {
e.data.node.bullet.firstChild.nodeValue = "- ";
};
$(dataNode.bullet).on("click",{node:dataNode},handler);
})();
}
ただし、この2番目のバリエーションは機能しません。
for (var i = 0 ; i< length ; i++) {
(function(){
dataNode = dataNodeList[i];
var handler = function() {
dataNode.bullet.firstChild.nodeValue = "- ";
};
$(dataNode.bullet).on("click",handler);
})();
}
この2番目の例では、
dataNode.bullet.firstChild.nodeValue = "- ";
意図したSPANの値には影響しません。JavaScriptが閉じているため、dataNode.bulletが変更したいSPANをまだ指していると思っていました。それで、誰かがこれが失敗する理由を説明できますか?ありがとう。