[英]Javascript - onkeyup, onclick and onfocus events are not getting fired automatically through Javascript
[英]How to distinguish between onClick and onFocus events in JavaScript?
我在同一个input-element上听onFocus
和onClick
事件。 onFocus
应始终将布尔值设置为true
, onClick
事件处理程序应切换此布尔值。
但是在点击时 ,首先使用onFocus
两个事件,因此首先将布尔值设置为true
,然后通过onClick
切换。 我该如何改变这种行为?
我试图在onClick
事件处理程序中使用stopPropagation
。 设置isClicked
标志也无济于事。 (可能因为两个事件同时被触发)(参见JSFiddle)
let input = document.getElementById("input");
let isOpen = false
input.onclick = () => {
isOpen = !isOpen
}
input.onfocus = () => {
isOpen = true
}
input.onblur = () => {
isOpen = false
}
JSFiddle: http : //jsfiddle.net/coh29gwe/7/
在第一次单击输入时, isOpen
标志应该为true,但为false 。
在设置isOpen变量时会有一些混淆。 我认为你应该使用这个element
hasFocus
属性来指示开始状态获取元素的焦点状态
或者您可以在设置之前在onClick()
验证isOpen
的值
if (isOpen == false){
isOpen = true;
}
因为当您执行单击时会触发onFocus
和onClick
,因此只需在没有onFocus
情况下调用onClick
时将isOpen
设置为true(通过脚本以其他方式我们不知道)
这将解决您的问题。 它一次只允许一次更新。
let input = document.getElementById("input");
let isOpen = false
let updated = false;
function updateOpenedStatus(newStatus) {
if (!updated) {
isOpen = newStatus;
updated = true;
setTimeout(() => updated = false, 0);
}
}
input.onclick = () => {
updateOpenedStatus(!isOpen);
}
input.onfocus = () => {
updateOpenedStatus(true);
}
input.onblur = () => {
updateOpenedStatus(false);
}
但是,因为看起来您可能想要完全改变行为,因为这个aria导航菜单和它处理事件的方式与您的实现不同。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.