1

これについての議論をまだ見つけられなかったなんて信じられません... HTML5 フォーム要素からイベントを処理する方法について質問がありました<input type="number"/>...これまでのところ、ブラウザにはかなりの矛盾があるようです。しかし、これに気付いた人は他にいませんか?

onchange矢印キーを使用して空白から数字に移動すると、イベントが2回発生します。自分で試してみてください。瞬時に 0 に変化してから 1 に変化しているようです。私は Chrome 23.0.1271.64 m を使用しています。他のブラウザは試していません。

バグですか?期待される?ブラウザ間で類似?より良い質問は、この動作を回避する最善の方法は何ですか? 私はいくつかのインスタント検証を行っています.0が無効なため、フレンドリーな「あなたはそれを行うことはできません」というテキストが一瞬表示されてから、再び消えます。上記のリンクされた質問では、「oninput」イベントを使用することが提案されましたが、ブラウザー間での動作について意見の相違がありました。

数値型はまだ完全にサポートされていないため、数値型を完全に忘れることが最善の方法だと思います。他の人がこれを取得しているかどうか、またどのように対処しているかを知りたいです。

4

2 に答える 2

2

再現しました。

入力が空白で始まる場合。上または下ボタンを最初に押すと、 に設定され0次に1またはに設定されます-1

これはバグではありません。

それはあなたにとって便利です!0 から開始する必要はありませんでした。


入力が空白で始まらない場合は、何の問題もありません。

于 2012-11-13T15:02:01.603 に答える
1

これは確かに良い点です。

しかし、最初に:これを回避する方法

値を保存するフォーカス ハンドラー onfocus を設定します。ブラー ハンドラー onblur を設定し、現在の値と保存された値を比較します。値が変更された場合は、「committedchange」イベントをトリガー/ディスパッチ/起動します。-> バストされた変更イベントの代わりに commitedchange イベントを使用してください :-)

ここにいくつかの考えがあります。ただし、最初にchange イベントの HTML5 仕様を読んでください。

今いくつかの歴史

HTML4 仕様には異なる定義がありました (値/checkednes が変更され、要素がアクティブ化またはフォーカスされていない場合にイベントが発生します)。これは、特にチェックボックスとラジオボタンにとって悪いことでした (これが、人々がクリックを使用し、これらの要素 (または jQuery) の変更イベント)。

新しい HTML5 仕様

新しい仕様は最初の定義を結合し、「明示的なコミット アクション」と呼ばれるいくつかの追加機能を追加します。実際には、これが何を意味するのかよくわかりませんが、ユーザーがスピンボタン (type=number) でマウスを押している間、このユーザーはコミットアクションを行っておらず、フォームと対話していて、まだ入力/変更を行う場合があります。

さらに、HTML5 は入力イベントを追加し、最終的ではない変更について「より早く」開発者に通知します。たとえば、これを datalist 要素と組み合わせて動的な変更を可能にするには、つまり autosuggest を作成します。

現実: ブラウザ

スピンボタンを使用した入力タイプの場合 (タイプ番号、時間など)。Opera と Chrome は非常によく似た動作をし (スピンボタンと対話すると入力と変更がトリガーされます)、Safari は onblur の変更をトリガーします。type=range の場合、すべてのブラウザーがこれを同等に処理します。マウスをドラッグしている間、常に change イベントと input イベントがトリガーされます。仕様とユースケースが異なる 2 つの異なるイベントがありますが、実際には同じことを行っています (はい)。

現実: 開発者

ユースケースで type=range の change イベントを使用するチュートリアルやスクリプトはたくさんありますが、代わりに input イベントを使用する必要がありますが、ご存知のように、開発者は愚かで、仕様の 1% しか読んでいません。

話の終わり

古い定義は悪く、役に立たなかった。新しい仕様は改善されましたが、理解できませんでした。誤用され、実装が不十分でした...そして今??? 古い悪い HTML5 チュートリアル/スクリプト コードを壊したいと思う人はいないと思います。

これを変えたいなら、私のヒーローになってください。

于 2012-11-13T23:17:41.247 に答える