HTML输入类型编号JavaScript onchange触发两次?

时间:2012-11-13 14:59:03

标签: javascript html forms html5 javascript-events

我无法相信我已经找不到任何关于此问题的讨论了...有关如何处理来自HTML5表单元素<input type="number"/>的事件的问题...... There seems to be a good bit of browser inconsistency so far.但是没有人注意到这个?

当使用箭头键从空白变为数字时,onchange事件发生了两次。 Try for yourself.似乎是瞬间更改为0然后1.我使用的是Chrome 23.0.1271.64 m。没试过其他浏览器。

这是一个错误吗?预期?浏览器类似?更好的问题是,避免这种行为的最佳方法是什么?我有一些即时验证的东西正在进行,并且0无效,我的友好的“你不能那样做”的文字出现在闪光灯再次离开之前。在上面链接的问题中,建议使用“oninput”事件,但是对于它在浏览器中的工作方式存在一些分歧。

我想最好的方法是完全忘记数字类型,因为它本身尚未完全支持。我很想知道其他人是否会得到这个,以及他们是如何处理它的。

2 个答案:

答案 0 :(得分:2)

我转载了它。

如果,则输入空白。首次按向上或向下按钮,将其设置为0然后将其设置为1-1

这不是错误。

这对您来说很方便!它不必从0开始,它可能已经开始在100000000000000000,但它没有: - )


如果输入开始为空白,则表示您没有任何问题。

答案 1 :(得分:1)

这确实是一个好点。

但首先:避免这种情况的方法

设置焦点处理程序onfocus保存该值。设置模糊处理程序onblur将当前值与保存的值进行比较,如果值已更改,则触发/调度/触发'comittedchange'事件。 - &GT;使用commitedchange事件而不是被破坏的更改事件: - )

以下是一些想法。但首先要阅读change event的HTML5规范。

现在有些历史

HTML4规范有一个不同的定义(如果一个值/被检查者发生了变化并且元素被激活或未聚焦事件发生),这对于复选框和单选按钮来说是一件坏事(这就是人们使用点击的原因)而不是那些元素(或jQuery)的更改事件)。

新的HTML5规范

新规范结合了第一个定义,并添加了一些额外的“显式提交动作”。实际上我并不真正理解这意味着什么,但我确定,当用户在旋钮(type = number)上按下鼠标时,此用户还没有完成提交操作,他仍在与表单进行交互仍然可能会做输入/更改。

此外,HTML5添加了输入事件,以便“更快地”通知开发人员一些非最终更改。例如,将其与datalist元素组合并允许动态更改,即创建自动提示。

现实:浏览器

如果输入类型带有旋钮(类型编号,时间等)。 Opera和Chrome表现得非常相似(与旋钮触发输入和更改相互作用)和Safari触发更改onblur。在type = range的情况下,所有浏览器都处理相同的情况。拖动鼠标时,会一直触发更改事件和输入事件。好吧,我们有两个不同的事件,不同的规格和用例,但他们在现实中做同样的事情(是的)。

现实:开发者

那里有很多教程和脚本使用type = range的用例更改事件,这应该取代输入事件,但是如你所知,开发人员很愚蠢,只读取规范的1%

故事结束

旧的定义很糟糕,并且没用。新规范得到了改进,但是不可理解,使用不当和实施不好......现在???我想没有人想破坏旧的HTML5教程/脚本代码。

如果您希望更改be my hero