2012-11-13 41 views
1

我不敢相信我在这方面找不到任何讨论......有关于如何处理来自HTML5表单元素<input type="number"/>的事件的问题... There seems to be a good bit of browser inconsistency so far.但是没有人注意到这一点?HTML输入类型编号JavaScript onchange激发两次?

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

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

我想最好的办法是忘记数字类型,因为它还没有完全支持自己。我有兴趣看看其他人是否正在获取这些信息,以及他们如何处理这个问题。

回答

2

我转载了它。

如果输入开始空白。在第一次按下向上或向下按钮时,它将其设置为0,然后将其设置为1-1

这不是一个错误。

这是一个方便你!它没有在0开始,它可能在100000000000000000开始,但如果输入的开始为空白,那么你就没有任何问题,也没有:-)


+0

没错。我只是不明白为什么它不能从空白变为1或空白为-1。这似乎更直观;你按下按钮一次,它会改变一次。 – Andrew

+0

另外,为了科学,您使用了什么浏览器? – Andrew

+0

'Chrome 23.0.1271.64 m' @Andrew – Neal

1

这确实是一个很好的观点。

但是首先:要避免此

设置的onfocus保存值的聚焦处理的一种方法。设置模糊处理器onblur比较当前值和保存值,如果值已更改触发/分派/触发'comittedchange'事件。 - >使用commitedchange事件而不是破坏事件变更事件:-)

这里有一些想法。但首先阅读change event的HTML5规范。

现在的一些历史

的HTML4规范有不同的定义(如果值/ checkednes变化和要素被激活或聚焦在事件发生),这是一件坏事,尤其对于复选框和单选按钮(这就是人们使用click而不是这些元素(或jQuery)的更改事件的原因)。

新的HTML5规范

新规范相结合的第一个定义,并增加了一些额外的叫做“明确承诺行动”。其实我并不是很明白这是什么意思,但我确定,当用户在旋钮(按键=数字)上按下鼠标时,这个用户还没有做过提交动作,他仍然与表单交互,仍然可能会做输入/更改。

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

现实:浏览器

在输入类型与spinbuttons的情况下(类型号,时间等)。 Opera和Chrome的行为非常相似(与spinbutton触发器输入和更改交互),并且Safari触发更改onblur。在类型=范围的情况下,所有的浏览器都在处理相同的情况。拖动鼠标时,始终触发更改事件和输入事件。好吧,我们有两个不同的事件,具有不同的规格和使用情况,但他们在现实中做着同样的事情(是的)。

现实:开发商

那么有很多教程,并在那里利用类型改变事件的脚本=范围使用的情况下,应采取输入事件相反,但你也知道,开发者很愚蠢,只能阅读规范的1%。

故事

旧的定义结束是坏的,并使其无用。新规范得到了改进,但不可理解,被错误使用和糟糕的实施......现在?我认为没有人想要打破旧的错误的HTML5教程/脚本代码。

如果你想这改变be my hero