( Placeholder Hiddenからの質問に従ってください)
フォームがロードされたときに既存のデータを検証するようにしたいと思います。私はそれを起こさせることができないようです
- 私は自分のコントロールの jQuery.each と focus() と blur() を呼び出しますが、これよりも良い方法はありますか? ctrl.checkValidity() を呼び出そうとしましたが、まだ定義されていませんでした。それがあったとき、それはまだコントロールをマークしませんでした。
- focus と blur() が発生している間、タイミングの問題もあるようですが、UI は更新されません。これは $.webshims.ready イベントで発生しますが、Webshims がまだ完全に読み込まれていないかのようです。
- $('#form').submit() も呼び出してみましたが、期待どおりにイベントが発生しません。それを実現できる唯一の方法は、input type='submit' を含めることでした。送信ボタンをクリックするようなフォーム検証を実際に行うにはどうすればよいですか?
問題を示すjsFiddleを次に示します。フォームが読み込まれると、無効な電子メールがそのようにマークされるようにします。追加ボタンをクリックするとマークされますが、最初にロードされたときはマークされません。なんで?
- コントロールのフォーカスとぼかしにより、マークが付けられます。
ただし、[追加] をクリックすることもできます (ロードされたときに実行されたのと同じメソッドが実行されます)。2回目には機能するのに、最初にロードしたときは機能しないのはなぜですか?
updateValidation : function () { this.$el.find('[placeholder]').each(function (index, ctrl) { var $ctrl = $(ctrl); if( $ctrl.val() !== "" && (ctrl.checkValidity && !ctrl.checkValidity()) ) { // alert('Do validity check!'); $ctrl.focus(); $ctrl.blur(); } }); }
これはFF 17.0.5で見られます。IE9 では問題がさらに悪化し、フィールドがエラーで表示される前に ADD を 2 ~ 3 回クリックする必要がある場合があります。ただし、「MIME タイプの不一致が原因で」気に入った js ファイルの一部でエラーが発生します。