Javascript:当在onkeyup事件中更改值时,onchange事件不会触发

7

我有这样一个简单的代码:

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

我不知道为什么当我按键时文本框的值会改变,但是onchange事件却没有触发。 如何触发onchange事件?

除了IE浏览器外,使用oninput来处理所有事情。 - zb'
使用:onkeyup="this.value = (new Date()).getSeconds();this.onchange();" - Ian
@Barmar, Ian:我不需要在onkeyup函数中文本框的值改变后立即触发onchange事件。我需要在单击页面以离开文本框时显示alert(1)。 - hieund
1个回答

1
< p >onchange将在您离开焦点时触发(如果您进行了任何更改)。这种行为仅适用于texttextarea输入类型,因为JavaScript不知道您何时完成输入。

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


有人能解释一下为什么会被踩吗?如果我错了,请指出来让我改正。 - martriay
“你为什么要这么做?”:因为我需要在按键抬起时获取输入值,如果它不合法,我会进行更正并返回有效的值。在我改变输入值后,我将在 onchange 事件中执行其他操作。但是,在这个简单的代码中,即使我点击页面离开文本框,onchange 事件也不会触发。(您可以将其复制到记事本中,并保存为 HTML 进行检查) - hieund
我不知道为什么代码中有一个复选框,但无论如何。真诚地说,我无法告诉你原因,但问题在于输入的动态值更改(猜测是用户未执行更改,但我真的不知道),如果您删除onkeyup内部的代码,它将起作用。无论如何,如果您想在输入失去焦点时执行某些代码,则可以使用onblur,在这种情况下更准确。 - martriay
是的,这个复选框是不需要的,我已经把它从代码中删除了。我也不理解。顺便说一下,onblue 事件满足了我的需求。非常感谢。 - hieund
好的,将我的评论复制到答案中,以便对于有同样疑问的人更加可见。 - martriay
1
onblur 很有帮助。 :) - Nirav Zaveri

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接