<!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,否则无法识别按钮单击。有没有办法获得所需的行为?
最佳答案
您的问题是警报。
当在元素上检测到一次 mousedown 和一次 mouseup 时,将触发 click 事件。
当您按下按钮时,将触发 mousedown 并使输入模糊,从而触发 onchange 事件。但它添加了一个警告,谁在前面(在光标和按钮之间,因此 mouseup 永远不会在按钮上触发,也不会在 onclick 上触发)。
为了避免这种情况,您可以:
- 删除警报(一切都会正常工作)
- 在按钮上注册 onmousedown,而不是 onclick。
关于javascript - 是否可以在 onchange 事件之后立即检测到 onclick 事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20166060/