<input type=text>
withfocusout
イベントハンドラーがあります<button>
クリックイベントハンドラーがあります
Focusoutは、入力ボックスの形式が正しいかどうかをチェックします。これは、正規表現に対して入力値をテストすることによって行われます。失敗した場合は、メッセージ (div
しばらくするとフェードインとフェードアウト) が表示され、呼び出して入力を再度フォーカスします。
window.setTimout(function() { $(this).focus(); }, 10);
focusout
イベントハンドラーで再フォーカスできないためです。focusout
イベントもキャンセル不可。参考までに。
Clickは入力要素からデータを収集し、Ajax を使用して送信します。
問題
ユーザーTABsがフォームを通過すると、すべて問題ありません。特定の入力ボックスがフォーマット チェックに失敗すると、ユーザーが を押した直後に再度フォーカスされますTAB。
しかし、ユーザーがTAB個々の入力フィールドを使用せずにクリックすると、. をクリックするまですべてが正常に機能しますbutton
。focusout
起動し、再フォーカスのタイムアウトを設定します。タイムアウトが非常に短いため、後でフォーカスが行われ、click
イベントが発生して Ajax リクエストが発行されます。
質問
私はフォーマット チェックを独立した jQuery プラグインとして実装しましたが、それを維持したいと考えています。フォーマット正規表現が定義されている特定の属性を持つすべての入力フィールド.live()
にアタッチするために使用します。focusout
データの送信も一般的であり、書式設定プラグインに依存させたくありません。どちらも独立したままにする必要があります。
これら 2 つのプラグインを依存させずに、クリック イベントが実行されないようにするにはどうすればよいですか?
私がいじっているコード例
いくつかの検索の後、すべての主要なブラウザーがサポートdocument.activeElement
されていることがわかりましたが、Chrome で動作させることはできません。FF と IE は両方ともアクティブな要素であると報告しますが、Chrome は要素で起動されたにもかかわらずアクティブであるとthis
常に言います。BODY
click
button
このコードhttp://jsfiddle.net/Anp4b/1/を確認して、ボタンをクリックしてください。Chrome と他のブラウザでテストして、違いを確認してください。