2009-07-23 10 views
2

このjQueryの選択を行うには良い方法があります:私は、テキストボックスやテキストエリアのため、フォーカスにblurイベントに、私の機能、HideDynamicFormErrorを結合し、他のフォーム入力要素のイベントをクリックしていますこのjQueryの選択を行うより良い方法はありますか?

$("p.DynFieldWrapper :input:not(:text):not(textarea)").focus(HideDynamicFormError).click(HideDynamicFormError); 
$("p.DynFieldWrapper :text,p.DynFieldWrapper textarea").blur(HideDynamicFormError); 

が。

これが働いているが、私はまだjQueryので物事のこつを取得していますし、これを行うためのより良い方法があったか不思議でしたか?

+0

私はあなたの名前/アバターのコンボを愛していると言いました。また、大量のコードを実行する必要がある場合、これによりすべてがかなり遅くなることにも言及する価値があります。 – Sneakyness

+0

@スニーカー - ありがとう!代わりにあなたは何をしますか?ダイナミックに生成されたフォームフィールドにDynFieldWrapperクラスが適用されていることも指摘しておきます。通常、ページには多くのフィールドはありませんが、可能です。パフォーマンスのために行ったもう一つのことは、HideDynamicErrorが呼び出されたときに、$(this).unbindを呼び出して、その特定の要素に対して再度呼び出されないようにすることです。 –

答えて

1

最初のものは少しシンプルにすることができます、あなたは罰金を

それ以外
$("p.DynFieldWrapper :input:not(:text,textarea)") 

やっています。

1

私はこれを行うために誘惑されるだろう:

(パフォーマンス的に)場合、私は、これは何をやっているとの比較方法を知りません。それは良いかもしれない。それはもっと悪いかもしれません。しかしそれはテストの価値がある。

あなたがやっていることは何も問題はありません。私は、すべてのpがどれくらい速く見つかったか、フォーム要素を探しているすべてのサブツリートラバーサルがあるかどうかは分かりません。ドキュメントのサイズや関連するサブツリーに依存します。

0

あなたも複数のイベントにイベントハンドラをバインドするバインド()を使用することができます。文脈が速く過ぎるかもしれとしてp.DynFieldWrapperを使用して、パフォーマンスをテストするには、このかかわらずが必要になります。

$("input:not(:text,:textarea)", "p.DynFieldWrapper") 
    .bind("focus click", HideDynamicFormError); 
+0

私はあなたがフォーカスとクリックの間のスペースでカンマを置き換える必要があると思う –

+0

あなたはありがとうございます:) –

0

方法については、この発見を使用しての私の考えで投げ+上記のすべての答えを、マージ?

$('p.DynFieldWrapper :input') 
    .find(':not(:text, textarea)') 
     .bind('focus click', HideDynamicFormError) 
    .end() 
    .find(':text, textarea') 
     .blur(HideDynamicFormError); 

EDIT:

もう一つのアイデア、ちょうど楽しみのために! (自分では好きではありませんが)

$('p.DynFieldWrapper :input') 
    .bind('focus click blur', 
     function(ev) 
     { 
      if($(this).is(':text, textarea')) 
      { 
       if(ev.type == 'blur') 
        HideDynamicFormError(ev); 
      } 
      else 
      { 
       if(ev.type != 'blur') 
        HideDynamicFormError(ev); 
      } 

     } 
    ); 
関連する問題