背景
既存します。フォームを介しpageloadで、Iはループなどなど、元の値、現在のフォーマット値、検証要件、等の検証のような方法、および特性保持それぞれについてJSオブジェクト変数の作成:は、すでに私は多くのテキスト入力(<code><input type="text" /></code>)でフォームを持っているJS要素
field = new Field(wrapperElements[i]);
入力はblur
イベントが発生したので、そのフィールドで検証を実行します。フォームを送信するときの最後まで待つのではなく、ユーザーがフォームを使用しているときに検証を実行できるように、これを行います。
次に、有効性の結果をFieldオブジェクトにキャッシュします。ユーザーがフォームを送信すると、すべてのフィールドを検証する必要はなく、計算済みの有効性をチェックするだけで、最後にスピードが向上します。
問題
ユーザーが唯一のフィールドを編集し、カーソルがそのフィールドにまだある、とユーザーのヒットが入ります。フィールドのblur
イベントを発生させる前に、フォームのsubmit
を起動します。フォームは、編集したフィールドを検証せずに送信を試みます。
submit
にすべてのフィールドを強制的に検証することができますが、それは私にとっては魅惑的ではないようですが、無駄な計算のようです。その要素が入力であれば、現在フォーカスされている要素を強制的に検証するだけです。
パートソリューション
私はdocument.activeElement
をテストしてみた、それが動作します。しかし、document.activeElement
が返すノードから、入力に関連付けられている既存のJS変数を取得する方法を理解できません。
具体的な質問
私は、HTML要素を持っている、と私は
<input type="text" value="My input!" id="mainInput" />
---
var field = document.getElementById('mainInput');
は...どうやって入手することができます...そのようにしてJS変数を作成する場合は、その
field
変数
document.activeElement
経由で別途ノードを返すことを知っているからでしょうか?
複数のフィールドが必要な場合、この回答のコードを使用して入力時に送信しないようにすると、問題が解決すると思います。http://stackoverflow.com/questions/16062525/disable-enter-submit – Cruiser
I Fieldオブジェクトをループして有効性をチェックするので、すでにevent.preventDefault()を使用しています。私はpageloadでそれらすべての妥当性を計算する必要はありません、私はバックグラウンドで、最終的に遅れを避けるために起こるようにそれを計算したいと思います。私は、HTML変数とともにFieldオブジェクトに妥当性をキャッシュします。フィールドは実際には '{data:{}、el:{}、validation:{} ...}'、およびいくつかの添付メソッドです。 –
私が言っていることは、あなたがフィールドを必要としていて、ユーザーがsubmitの入力を押すことができない場合、.blurバリデート関数を強制的に起動させることです。 – Cruiser