<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常に言います。BODYclickbutton
このコードhttp://jsfiddle.net/Anp4b/1/を確認して、ボタンをクリックしてください。Chrome と他のブラウザでテストして、違いを確認してください。