jquery小部件:将事件附加到特定元素

时间:2013-11-24 11:26:29

标签: jquery jquery-widgets jquery-ui-widget-factory

以下是小部件的片段:

(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,但它就在那里。

1 个答案:

答案 0 :(得分:0)

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

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


_attachEvent:function()
   {
       ele.off('change','textarea',handleChange);
       ele.on('change','textarea',handleChange);
   }