【发布时间】:2018-02-01 21:47:53
【问题描述】:
TL;DR:
如果您在 Firefox 和 Chrome 中,单击此按钮会在单击事件上提供不同的目标。似乎应该有一个优雅的解决方案来解决这个问题,而不必检查元素的父元素以查看它是否是按钮。
类似问题:
详情
JS:
let guid = '05c4d5b0-44c6-4e4f-a4dd-b5ac9029b3a9';
//Get the div with this GUID.
let elem = document.getElementById(guid);
//Get the button that belongs to this div that has the 'delete-device' class.
let b = elem.getElementsByClassName("delete-device")[0];
//Add listener to delete the div when clicked.
b.addEventListener("click", delete_devices, false);
HTML:
<button data-id="05c4d5b0-44c6-4e4f-a4dd-b5ac9029b3a9" class="btn-floating btn-small waves-effect waves-light red delete-device ">
<i class="material-icons">delete</i>
</button>
在 Firefox 中,e.target 是按钮。
在 Chrome 中,e.target 是 <i> 元素。
所以,当我们执行回调时(如下)Chrome 找不到我们需要的 div,并将变量设置为 null,这(当然)会抛出错误。
function delete_devices(e){
e.preventDefault();
let id = e.target.getAttribute('data-id');
let elem = document.getElementById(id);
elem.remove();
return true;
}
【问题讨论】:
-
你不需要
e.target,改用this。 -
你能用
span代替i吗?spans 没有同样的问题。 -
另外,您引用了包含 GUID 的
id,但您根本没有显示带有id的元素。你用过data-id。
标签: javascript