2009-07-23 3 views
2

이 jQuery를 선택을 할 수있는 더 좋은 방법이 : 나는 텍스트 상자와 텍스트 영역과 초점에 흐림 이벤트에, 내 기능, 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

bind()를 사용하여 이벤트 핸들러를 여러 이벤트에 바인드 할 수도 있습니다. 컨텍스트로 p.DynFieldWrapper을 사용하는 것이 더 빠를 수도 있습니다.하지만 성능 테스트를해야합니다.

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

나는 당신이 초점과 클릭 사이의 공백으로 쉼표를 대체해야한다고 생각 –

+0

맞아, 고마워요 :) –

0

위의 모든 대답을 병합하고 + ​​find를 사용하여 내 아이디어를 던지면 어떨까요?

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

편집 :

또 다른 아이디어, 단지 재미를 위해! (비록 내가 혼자서 맘에 안들지만)

$('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); 
      } 

     } 
    ); 
관련 문제