【问题标题】:jquery widget: attach event to particular elementjquery 小部件:将事件附加到特定元素
【发布时间】:2013-11-24 11:26:28
【问题描述】:

以下是小部件的 sn-p:

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

【问题讨论】:

  • 我在这里没有看到任何变化。只是你粘贴了我的代码吗
  • 没有。我用this.element.on('change'
  • 这里ele 是一样的

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


【解决方案1】:

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

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


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

【讨论】:

    猜你喜欢
    • 2019-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-18
    • 1970-01-01
    • 1970-01-01
    • 2011-06-02
    • 1970-01-01
    相关资源
    最近更新 更多