Javascript 将参数传递给eventListener函数

Javascript 将参数传递给eventListener函数,javascript,Javascript,我有一个函数检查(e),当我将test()添加到eventListener时,我希望能够从中传递参数。这可能吗?比如说让mainlink变量通过参数。这样做好吗 我把javascript放在下面,我也把它放在jsbin上: 在这种情况下,我通常会将参数保存到对象(只要方便),然后在函数中检索它们,如下所示: // Listener function receives e (the event object) by default. function eventReceiver(e) {

我有一个函数检查(e),当我将test()添加到eventListener时,我希望能够从中传递参数。这可能吗?比如说让mainlink变量通过参数。这样做好吗

我把javascript放在下面,我也把它放在jsbin上:


在这种情况下,我通常会将参数保存到对象(只要方便),然后在函数中检索它们,如下所示:

// Listener function receives e (the event object) by default.
function eventReceiver(e) {  
  var obj;

  // Find object which triggered the event
  e.srcElement ? obj = e.srcElement : obj = e.target;

  // obj.someProperty has been set elsewhere, replacing a function parameter
  alert(obj.someProperty);   
}
这是跨浏览器的,允许您通过事件目标的属性传递对象和值


我最初是从
这个
关键字开始的,但它在浏览器中的表现不同。在FF中,它是触发事件的对象。在IE中,这是事件本身。因此,
srcelelement
/
target
解决方案诞生了。不过,我有兴趣看看其他解决方案—使用+1。

一个解决方案是将“check”函数向上移动到test()函数中。作为一个内部函数,它将自动引用其外部范围中的变量。像这样:

function test() {
  if (!document.getElementById('myid')) {
  var mainlink = document.getElementById('mainlink');
  var newElem = document.createElement('span');
  mainlink.appendChild(newElem);
  var linkElemAttrib = document.createAttribute('id');
  linkElemAttrib.value = "myid";
  newElem.setAttributeNode(linkElemAttrib);

  var linkElem = document.createElement('a');
  newElem.appendChild(linkElem);

  var linkElemAttrib = document.createAttribute('href');
  linkElemAttrib.value = "jsbin.com";
  linkElem.setAttributeNode(linkElemAttrib);

  var linkElemText = document.createTextNode('new click me');
  linkElem.appendChild(linkElemText);

  if (document.addEventListener) {
  document.addEventListener('click', function(e) {

    if (document.getElementById('myid')) {
      if (document.getElementById('myid').parentNode === mainlink) {
        var target = (e && e.target) || (event && event.srcElement); 

        if (target!= mainlink) {
          mainlink.removeChild(mainlink.lastChild);
        };
      };
    };
  });
};

将事件侦听器包装到函数中:

document.addEventListener( 
          'click', 
           function(e,[params]){
              check(e,[params]);
           } 
);

很好,很快,谢谢大家的帮助。希望有一天我能像你一样做出贡献。
document.addEventListener( 
          'click', 
           function(e,[params]){
              check(e,[params]);
           } 
);