0

以下是小部件的片段:

(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 次。它不应该这样发生。它应该只为单个文本区域调用一次警报消息。

如何将事件附加到单个元素?我想在这里我将事件附加到所有文本区域,这就是原因。

如果我像onkeypress='_this._somefunction()'它说的那样添加内联事件,_this is undefined但它就在那里。

4

1 回答 1

0

一种选择是在每次添加之前删除事件处理程序。

function handleChange(){
  alert('ta pressed');
}


_attachEvent:function()
   {
       ele.off('change','textarea',handleChange);
       ele.on('change','textarea',handleChange);
   }
于 2013-11-24T11:40:44.367 回答