【发布时间】:2016-06-02 06:04:37
【问题描述】:
我创建了这个简短的 sn-p 来测试是否可以在 javascript 事件中触发 default 处理程序。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
<script></script>
document.addEventListener('mousedown', function (e){
console.log('mousedown', e);
if (e.target === document.getElementById('target')) {
if (!e.__redispatched) {
e.preventDefault();
e.stopPropagation();
e.stopImmediatePropagation();
var ne = new MouseEvent('mousedown', e);
ne.__redispatched = true;
setTimeout(function (){
e.target.focus();
e.target.dispatchEvent(ne);
}, 1000);
}
}
}, true);
</head>
<body>
<input type="text" id="target"/>
<input type="text"/>
</body>
</html>
我预计target 输入将接收事件并正常处理它,从而将插入符号移动到正确的位置(就像它在mousedown 上通常所做的那样)。但是什么也没发生。
我的问题:
我对dispatchEvent 做错了什么还是浏览器在处理合成事件时忽略了默认处理程序?有什么材料/证据吗?
谢谢。
【问题讨论】:
标签: javascript dom javascript-events