2012-02-20 16 views
0

入力要素にonchangeイベントがあります。 onchangeイベントは、値が受け入れられなかった場合にユーザーに警告し、input要素にフォーカスを戻します。 しかし、ユーザーが要素をクリックすると、onchangeイベントは発生しません。これは、ユーザーがそれ以上の変更を行っていないために理解できますが、一度だけ検証するという問題が発生します。入力要素の変更前の値を設定することはできますか

変更前の値にリセットする可能性のある解決策を模索しましたが、ユーザーが入力した値を修正することを可能にするために可能な限り避けたいと思います全体をもう一度入力してください。

もう1つの可能性は、ぼかしイベントに検証を入れることでしたが、これは他の要素がフォーカスされていると発砲するイベントなどの他の問題を引き起こします。

ユーザーが入力値を 'X'から 'Y'に変更した場合、要素にフォーカスを戻して値を 'Y'として残してもよいが、 'X'値が変更された場合、ユーザーが 'X'に変更すると変更イベントはその後発生しませんが、 'Y'のままにして再度フォーカスを失うと、変更イベントは 'X ' おもちゃ'?

答えて

0

アラートを使用する代わりに、フィールドを無効(マークアップを追加するためにCSSまたはjQueryを使用)としてマークするだけではどうですか?ユーザーが値を有効な値に変更し、検証スクリプトが無効なマーキングを削除するまで、フィールドは無効のままです。

+0

私がCSS、jQuery、アラートを使用しているかどうかは、実際には問題の原因ではありません。問題は、要素にフォーカスを戻さなければならないことです。残念なことに、これは、後続の変更イベントが元のイベントではなく、「新しい」値に基づくことを意味します。 – Matt

+0

ユーザーはフォーム要素のフォーカスを与えます。ユーザーが値を変更します。値は無効であり、フォーム要素がフォーカスを失うことなく** **そのようにマークされています。ユーザーは値を再び変更します。値が有効であるとチェックされ、無効なマーキングが削除されます。 – Tim

0

入力タイプのテキストですか?このような状況では、あなたが記述しているまさにその理由のために、私はonchangeの代わりにonkeyupを使うことを好みます。

時にはうまくいかない:キーが押されていない(shift + insertまたはctrl + vがあるので)テキストボックスをテキストボックスに貼り付けると、変更が反映されません。 onchangeとonkeyupの両方に同じイベントを追加して、すべての基底をカバーすることができます。

+0

これはタイプテキストであり、数値だけを受け入れます(無効な文字を抑止するためにonkeyupとonkeypressの組み合わせを使用します)。それは問題ではありません。私のシナリオでは、onchangeイベントを追加して、最終的に型付けされた数値が最小値と最大値の間にあることを確認したい場合(onkeyupは使用できません)、onchangeを使用する必要があります。 onchangeは最初に起動し、フォーカスを要素に戻しますが、ユーザーが再びクリック/タブアウトすると、再び起動しません。 – Matt

+0

この部分は提出される可能性のある書式ですか?もしそうなら、これは私がやっていることです:onkeyupイベントを使用してテキストボックスのスタイルを設定する(Timの答えに示唆されるように)、またはテキストボックスの後にメッセージを挿入/削除します。フォーム送信をブロックするフォームonsubmitイベントに添付された別のイベントを使用し、警告を無視した場合にユーザーに警告します。それはあなたの問題に対する妥当な解決策ですか? –

+0

あなたの質問をもう一度読んだら、テキストボックスに任意の段階で無効な値を残したくない場合がありますか? –

関連する問題