javascript addEventListener在OOPS中注册多个事件

javascript addEventListener在OOPS中注册多个事件,javascript,events,addeventlistener,Javascript,Events,Addeventlistener,当我使用我的Javascriptoop的方法点击注册的元素时,它会运行事件我点击元素多少次 e、 g:单击创建文件夹链接,然后单击创建按钮您单击创建文件夹链接的次数。请求在同一时间发出 下面是完整的代码JSFIDLE代码链接:您需要显式禁用“创建文件夹”按钮,直到请求完成。然后在请求完成后,重新激活按钮。基本上,您可以获得对按钮的引用,如下面的人为示例所示: function myclass(){ var _d =document,_w = window,self=myclass; var

当我使用我的
Javascript
oop的方法点击注册的元素时,它会运行事件我点击元素多少次

e、 g:单击创建文件夹链接,然后单击创建按钮您单击创建文件夹链接的次数。请求在同一时间发出


下面是完整的代码JSFIDLE代码链接:

您需要显式禁用“创建文件夹”按钮,直到请求完成。然后在请求完成后,重新激活按钮。基本上,您可以获得对按钮的引用,如下面的人为示例所示:

function myclass(){
 var _d =document,_w = window,self=myclass;

var addEvent = function (el,e,callback,capture){
    var evt = _w.event;
    if(_w.addEventListener){
      el.addEventListener(e,callback,capture);         
    }else el.attachEvent("on"+e,callback,capture); 

   }
   var removeEvent = function (el,e,callback){ console.log("rmv")
      if(window.removeEventListener)
       el.removeEventListener(e,callback);
    else el.detachEvent("on"+e,callback);
 }

 function startWork(params){
  self.cfUrl  = params.createfolder || ""; 
   var cf = select('[data-action="createfolder"]');
    addEvent(cf,'click',mymethod);   

  }      
  return {         
    addEvent:addEvent,
    init:startWork,
    removeEvent:removeEvent,
 };   
 }     
然后,在成功返回XHR后,通过执行以下操作重新启用按钮:

var btn = document.getElementById(buttonID);
btn.disabled =true;
这一切的原因是元素无法告诉您希望它只发射一次。因此,一旦您将侦听器附加到元素,它就知道要侦听其指定类型的每个事件,无论该事件发生多少次


为了防止它,您必须明确指示它在当前请求完成之前不要响应任何进一步的请求。您可以通过禁用它直到当前请求返回。

您需要显式禁用“创建文件夹”按钮,直到请求完成。然后在请求完成后,重新激活按钮。基本上,您可以获得对按钮的引用,如下面的人为示例所示:

function myclass(){
 var _d =document,_w = window,self=myclass;

var addEvent = function (el,e,callback,capture){
    var evt = _w.event;
    if(_w.addEventListener){
      el.addEventListener(e,callback,capture);         
    }else el.attachEvent("on"+e,callback,capture); 

   }
   var removeEvent = function (el,e,callback){ console.log("rmv")
      if(window.removeEventListener)
       el.removeEventListener(e,callback);
    else el.detachEvent("on"+e,callback);
 }

 function startWork(params){
  self.cfUrl  = params.createfolder || ""; 
   var cf = select('[data-action="createfolder"]');
    addEvent(cf,'click',mymethod);   

  }      
  return {         
    addEvent:addEvent,
    init:startWork,
    removeEvent:removeEvent,
 };   
 }     
然后,在成功返回XHR后,通过执行以下操作重新启用按钮:

var btn = document.getElementById(buttonID);
btn.disabled =true;
这一切的原因是元素无法告诉您希望它只发射一次。因此,一旦您将侦听器附加到元素,它就知道要侦听其指定类型的每个事件,无论该事件发生多少次


为了防止它,您必须明确指示它在当前请求完成之前不要响应任何进一步的请求。在当前请求返回之前,您可以禁用它。

您只需在第一次调用后删除事件侦听器即可

在回调函数本身内部调用
removeEvent()
函数,但必须使用外部函数作为回调函数,因为使用同名函数时,removeEventListener将无法按照文档中的说明工作

这是一个简单的用例示例:

var\u d=document,
_w=窗口;
var addEvent=函数(el、e、回调、捕获){
var evt=_w.事件;
如果(_w.addEventListener){
el.addEventListener(e、回调、捕获);
}else el.attachEvent(“打开”+e,回调,捕获);
}
var removeEvent=函数(el、e、回调){
控制台日志(“rmv”)
if(window.removeEventListener)
el.removeEventListener(e,回调);
else el.detachEvent(“on”+e,回调);
}
var increment=函数增量(){
var inc=document.getElementById(“inc”);
inc.value=parseInt(inc.value)+1;
}
var clickme=document.getElementById(“clickme”);
addEvent(单击我,'单击',增量);
var increment2=函数increment2(){
var inc2=document.getElementById(“inc2”);
inc2.value=parseInt(inc2.value)+1;
//删除回调中的事件
移除事件(单击ME2,'单击',递增2);
}
var clickme2=document.getElementById(“clickme2”);
addEvent(单击ME2,'单击',递增2)
而不调用removeEvent

移动


您只需在第一次调用后删除事件侦听器

在回调函数本身内部调用
removeEvent()
函数,但必须使用外部函数作为回调函数,因为使用同名函数时,removeEventListener将无法按照文档中的说明工作

这是一个简单的用例示例:

var\u d=document,
_w=窗口;
var addEvent=函数(el、e、回调、捕获){
var evt=_w.事件;
如果(_w.addEventListener){
el.addEventListener(e、回调、捕获);
}else el.attachEvent(“打开”+e,回调,捕获);
}
var removeEvent=函数(el、e、回调){
控制台日志(“rmv”)
if(window.removeEventListener)
el.removeEventListener(e,回调);
else el.detachEvent(“on”+e,回调);
}
var increment=函数增量(){
var inc=document.getElementById(“inc”);
inc.value=parseInt(inc.value)+1;
}
var clickme=document.getElementById(“clickme”);
addEvent(单击我,'单击',增量);
var increment2=函数increment2(){
var inc2=document.getElementById(“inc2”);
inc2.value=parseInt(inc2.value)+1;
//删除回调中的事件
移除事件(单击ME2,'单击',递增2);
}
var clickme2=document.getElementById(“clickme2”);
addEvent(单击ME2,'单击',递增2)
而不调用removeEvent

移动


您的问题到底是什么?参见示例:-只需单击“创建文件夹”链接2次,然后单击“创建”按钮,然后在浏览器控制台中查看触发XHR请求的次数。它会触发你点击链接多少次的请求。如果我答对了,你希望出现这样的情况:如果你多次点击链接,它只会调用XHR一次,对吗?你的问题是什么?参见示例:-只需点击“创建文件夹”链接两次,然后点击“创建”按钮然后在浏览器控制台中查看它触发XHR请求的次数。它会触发你点击链接多少次的请求。如果我猜对了,你希望出现这样的情况:如果你点击链接不止一次,它只调用XHR一次,对吗?你看到示例链接了吗。这与您所理解的不同。查看示例,单击“创建文件夹”链接2,3,4,5,6次,然后在文本框中键入任意值,然后单击“创建”按钮,您可以看到您单击“创建文件夹”链接的次数。addeventlistener触发器函数多次出现……您是否看到了示例链接。这与您所理解的不同。查看示例,单击“创建文件夹”