addEventListener未附加到正确的范围

时间:2016-04-03 20:35:13

标签: javascript dom

我正在使用原生DOM的const domElement = document.getElementById('ember464'); domElement.addEventListener('click', dosomething); this._listeners.push({target: domElement, type: 'click', callback: dosomething}); 事件,如下所示:

_listeners

这会注册该事件并将其存储在_listener数组中,以便以后清理它。好消息是这个事件确实附加到DOM但是事件虽然目标明确地限定为单个按钮,但是只要在文档上检测到任何地方,就会触发处理程序!

我做错了吗?

P.S。这是浏览器检查器查看#wrap { position: fixed; top:0; height:50px; width: 100%; background-color:#ff0; display:flex; justify-content: space-between; } #one { height:50px; width: 40%; background-color: #f00; } #two { height:50px; width: 40%; background-color: #00f; }数组...请注意突出显示" target"确实只指向我试图瞄准的按钮。 AKA,目标是DOM节点,而不是用于标识节点的选择器。

image

我现在看了一下目标DOM元素的调试器,我看到了以下内容:

enter image description here

对于任何勇敢的人来说,这里都是代码的工作演示。第二个按钮由" click"触发。事件是这个问题的主题:

  

https://ui-animate.firebaseapp.com/

完整的源代码在这里:link

1 个答案:

答案 0 :(得分:1)

好的,问题在于我在问题中没有说明的一些代码。现代浏览器都支持DOM方法public class TodayDeals extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_today_deals); findViewById(R.id.samsung).setOnClickListener( new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(TodayDeals.this,TodayDeal.class); TodayDeals.this.startActivity(intent); } } ); findViewById(R.id.back).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { finish(); } }); } ,但为了支持只有addEventListener的旧浏览器,我添加了以下抽象:

attachEvent

这个问题是"这个"上下文在通话中丢失了。所以我改为以下内容:

registerListener(target, type, callback) {
  const addListener = target.addEventListener || target.attachEvent;
  const eventName = target.addEventListener ? type : 'on' + type;

  addListener(eventName, callback);
},