以下は、ウィジェットのスニペットです。
(function($){
var ele,_this;
$.widget('test.mywidget',{
_loadComments:function(d)
{
$.each(d,function(k,v){
var p=$('<div/>').addClass('comment').attr('id',v.id);
p.append("<textarea class='ui-border' onkeypress='_this._submitReply()'></textarea>");
ele.find('.prevComments').append(p);
});
},
_submitReply:function(){}
_attachEvent:function()
{
ele.on('change','textarea',function(){
alert('ta pressed');
});
}
_create:function(){
ele=this.element;
_this=this;
this._loadComments(somedata);
this._attachEvent();
}
});
});
問題は、this._loadComments(somedata);
2 つのレコードがある場合、テキストエリア内でキーを押すalert('ta pressed');
と 2 回呼び出され、10 データの場合は 10 回呼び出されることです。このようなことがあってはなりません。個々のテキストエリアに対してアラート メッセージを 1 回だけ呼び出す必要があります。
個々の要素にイベントを添付するにはどうすればよいですか? ここで、すべてのテキストエリアにイベントを添付していると思うのはそのためです。
onkeypress='_this._somefunction()'
それが言うようにインラインイベントを追加すると_this is undefined
、そこにあります。