我正在使用原生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节点,而不是用于标识节点的选择器。
我现在看了一下目标DOM元素的调试器,我看到了以下内容:
对于任何勇敢的人来说,这里都是代码的工作演示。第二个按钮由" click"触发。事件是这个问题的主题:
完整的源代码在这里:link
答案 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);
},