是否可以在更改事件之后立即检测到 onclick 事件
Is it possible to detect an onclick event immediately following an onchange event?
<!DOCTYPE html> <!-- HTML5 -->
<html>
<head>
<meta charset="UTF-8">
</head>
<body>
<p><button type="button" onclick="show()">Show new name</button></p>
<p>Name: <input type="text" onchange="changed()" id ="nm" name="FirstName" value="Mickey"></p>
<p>New name: <span id="sh" ></span></p>
<script>
function show()
{
var elem = document.getElementById("nm");
name = elem.value;
document.getElementById("sh").innerHTML = name;
}
function changed()
{
alert("Name changed");
}
</script>
</body>
</html>
如果用户键入新名称,更改焦点,然后单击按钮,则新名称将按预期显示。但是,如果用户更改名称,然后单击按钮而不更改焦点,则不会显示新名称。这是为什么呢?在我的代码中,有几个输入,我想在更改每个输入时处理每个输入,然后在单击按钮时执行更多操作。问题是,除非用户首先进行非直观的鼠标单击或按 Enter 键,否则无法识别按钮单击。有没有办法获得所需的行为?
您的问题是警报。
在元素上检测到一个鼠标按下和一个鼠标向上时,将触发单击事件。
当您按下按钮时,鼠标按下会触发,输入上的模糊会触发 onchange 事件。但它添加了一条警报(在您的光标和按钮之间,因此鼠标向上永远不会在按钮上触发,也不会在点击时触发(。
要避免这种情况,您可以:
- 删除警报(一切都将正常工作(
- 在按钮上注册鼠标向下注册,而不是单击。
我不完全明白你想要实现的目标。但是,如果您只想在单击按钮后更改名称,而焦点仍在输入中,只需将"onchange"函数更改为show((
<p><button type="button" onclick="show()">Show new name</button></p>
<p>Name: <input type="text" onchange="show()" id ="nm" name="FirstName" value="Mickey"></p>
<p>New name: <span id="sh" ></span></p>
示例小提琴
正如 m59 所说,内联 JavaScript 从来都不是一个好的做法。
当元素的值已更改时,将发生 onchange
事件,当用户单击元素时,将发生 onclick
事件。
我建议你使用onblur
事件。试试这个:
<p>Name: <input type="text" onblur="changed()" id ="nm" name="FirstName" value="Mickey"></p>
当对象失去焦点时,将发生 onblur 事件。
查看此处:演示
相关文章:
- 如何检测滚动事件是否像在触摸设备上一样只触发一次
- 检测演示者工具的事件,类似于onmousedown
- 检测window.opener窗口刷新事件
- 检测“;animationend”;链接动画集的事件
- 在离子2中,有任何方法可以将涡旋动量作为一个事件来检测
- 如何识别“;输入“;没有浏览器检测的事件
- 当pswp库关闭时,Photoswipe.js检测到事件
- 如何使用javascript检测不可滚动元素中的滚动事件和方向
- 在onkeyup事件中未检测到文本区域更改
- 检测打印(非打印预览)事件
- 在聊天窗口中检测链接单击事件
- 检测单击子节点并发送槽事件处理程序
- 鼠标滚轮事件检测目前在 Firefox 中不起作用
- 使用 JQuery 事件检测特定的 CSS 关键帧动画
- Paper.js:hitTest通过鼠标事件检测被阻挡的项目
- jQuery / Javascript事件检测页面更改取消
- Cordova滑动事件检测选项为Android, iOS和Windows平板电脑
- 关闭日期拾取器的Angular事件检测
- 函数表达式/事件检测在 ie<=9 或 Safari 中不起作用
- 通过鼠标事件检测移动设备