私は JavaScript 初心者です。EventListener を Node.on('click', foo); に追加する必要がありました。そして私の最初の試みは - もちろん - 失敗でした:
var i = 0;
Y.one('#btnDel' + i).on('click', function () {
Y.one('#part' + i).remove(true);
});
そのようなものが「JavaScript: The Good Parts」の本にあったことを思い出し、それを見つけました (ページ 39):
var add_the_handlers = function (nodes) {
var i;
for (i = 0; i < nodes.length; i += 1) {
nodes[i].onclick = function (i) {
return function (e) {
alert(e);
};
}(i);
}
};
しかし、それもうまくいきません。もう一度 (21 回目) 見てみると、何か問題がありました。引数 'e' を必要とする内部関数を返しますが、'i' は内部関数に呼び出されず、外部関数にのみ呼び出されます。私はこれを「修正」し、今では YUI で動作します:
Y.one('#btnDel' + i).on('click', function (i) {
return function () {
Y.one('#part' + i).remove(true);
}
}(i));
errata パッケージに、誰かがこの「修正」も書きました。しかし、著者 (Crockford!) はまだ書籍版に固執しています。私が監督しているものはありますか?私のバージョンが私のケースで機能するのは偶然ですか?
ps:i
匿名リターン関数を にバインドするとthis.i
、これはグローバル オブジェクトになりますか?
pps: 私の素晴らしい英語でごめんなさい。:|