javascript - 是否可以在 onchange 事件之后立即检测到 onclick 事件?

标签 javascript dom-events

<!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/

相关文章:

javascript - 用户脚本 : run JavaScript on password fields as they're loaded

javascript - meteor 联系表格邮件错误

javascript - 是否可以在元素上找到委托(delegate)事件?

javascript - 如何根据另一个事件流推迟 Observable 的发射?

javascript - removeEventListener - 函数定义本身内的回调?

javascript - onChange 事件与复选框的 JavaScript 修改

php - 反作用 javascript .click 或替代 href

javascript - 外行对为什么 JavaScript 有奇怪的 float 数学的解释——IEEE 754 标准

Javascript鼠标悬停事件更改表单提交按钮图像

javascript - 检测类似于 onmousedown 的演示工具的事件?