2012-11-13 39 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