Javascript:在onkeyup事件中更改值时不会触发onchange事件[重复]

Posted

技术标签:

【中文标题】Javascript:在onkeyup事件中更改值时不会触发onchange事件[重复]【英文标题】:Javascript : onchange event does not fire when value is changed in onkeyup event [duplicate] 【发布时间】:2013-02-08 19:48:49 【问题描述】:

我有这个简单的代码:

    <body>
        <input type="text" onkeyup="this.value = (new Date()).getSeconds()" onchange="alert(1)" /> 
    </body>

我不知道为什么当我按下键时文本框的值发生了变化,但 onchange 事件没有触发。 如何触发 onchange 事件?

【问题讨论】:

对所有内容都使用 oninput 即 使用:onkeyup="this.value = (new Date()).getSeconds();this.onchange();" @Barmar, Ian :我不需要在 onkeyup 函数中文本框的值更改后立即发生 onchange 事件。当我点击页面离开文本框时,我需要 alert(1) 显示。 【参考方案1】:

onchange 将在您离开焦点时触发(如果您执行了任何更改)。此行为仅发生在 texttextarea 输入类型中,因为 javascript 不知道您何时完成输入。

我不知道为什么代码中有一个复选框,但无论如何。真诚地,我无法告诉你为什么,但问题是输入的动态值变化(猜测是用户没有执行更改,但我真的不知道),如果您删除 onkeyup 中的代码它将起作用。无论如何,如果您想要在输入失去焦点时执行一些代码,您可以改用onblur,在这种情况下更准确。

【讨论】:

对否决票的解释?我想对此进行更正,否则我将保持错误。 “你为什么要这么做?” : 因为keyup的时候要获取输入值,如果不合法,我会改正,返回有效值。更改输入值后,我将在 onchange 事件中执行其他操作。但是,在这个简单的代码中,即使我单击页面以离开文本框的焦点,onchange 也不会触发。 (可以复制到记事本,另存为html查看) 我不知道为什么代码中有一个复选框,但无论如何。真诚地,我无法告诉你为什么,但问题是输入的动态值变化(猜测是用户没有执行更改,但我真的不知道),如果您删除 onkeyup 中的代码它将起作用。无论如何,如果您想要在输入失去焦点时执行一些代码,您可以改用onblur,在这种情况下更准确。 是的,复选框是不需要的,我从代码中删除了它。我也无法理解。顺便说一句,onblue 事件满足了我的需要。非常感谢。 onblur 是一个帮助。 :)

以上是关于Javascript:在onkeyup事件中更改值时不会触发onchange事件[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Knockout js表编辑列获取onkeyup / Onchange最新值。 [小提琴](https://jsfiddle.net/chiks/975ncawv/521/)

JavaScript 在JavaScript中仅检测onkeydown / onkeyup / onkeypress上的实际文本更改

JavaScript:onkeyup() 的原始目标

使用 Javascript onkeyup() 更改 IE8 中的不透明度(再次)

onkeyup事件

如何onkeypress事件中得到一个输入文本框的文本