以下是小部件的片段:
(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);
有两条记录,那么如果我按下textarea alert('ta pressed');
内的密钥被调用2次,如果它是10条数据则被调用10次。不应该这样。它应该只针对单个textarea调用一次警报消息。
如何将事件附加到单个元素?我想在这里我将事件附加到所有textarea,这就是原因。
如果我添加onkeypress='_this._somefunction()'
之类的内联事件,它会显示_this is undefined
,但它就在那里。
答案 0 :(得分:0)
一个选项是在每次添加之前删除事件处理程序。
function handleChange(){
alert('ta pressed');
}
_attachEvent:function()
{
ele.off('change','textarea',handleChange);
ele.on('change','textarea',handleChange);
}