2009-08-05 7 views
7

현재 선택 상자의 값을 확인한 다음 텍스트 필드 바로 옆에있는 스크립트를 사용하여 초점을 설정하고 있습니다. 내가 입력 필드를 활성화에서 잘 작동 순간이있다jQuery의 다음 입력으로 포커스 설정?

...

$("#assessed select").change(function() { 

    if($(this).val() == 'null') { $(this).next('input').attr("disabled", true); } 
    else { $(this).next('input').removeAttr("disabled"); } 

}); 

내가 '초점'비트에 붙어 조금 정직하게, 나는 "$을 시도하고있어 (이) .next ('input'). focus(); " 하지만 그것은 자바 스크립트 오류를 ​​발생시키지 않았지만 전혀 초점을 맞추지 않았습니다 ...

$("#assessed select").change(function() { 

    if($(this).val() == 'null') { $(this).next('input').attr("disabled", true); $(this).next('input').focus(); } 
    else { $(this).next('input').removeAttr("disabled"); } 

}); 

어떤 아이디어가 좋습니까? 나는 이것에 정말로 붙어 있고 그것은 내가 만들고있는 페이지에 매우 간단하지만 매우 유용한 추가 일 것이다!

덕분에

+0

당신뿐만 아니라 당신의 HTML을 게시 할 수 없습니다 :

$("#assessed select").change(function() { var $this = $(this); if($this.val() === 'null') { $this.next() .attr("disabled", true); } else { $this.next() .removeAttr("disabled") .focus(); } }); 
RaYell

답변

5

. 또한 내부의 필터는 필요하지 않습니다. next()는 다음 형제 만 반환합니다. 필터는 기본적으로 입력 또는 필터를 제공하는 경우에만 다음으로 가져 오기를 말합니다. 원하는 객체가 다음 객체인지 확실하면 필터를 포함 할 필요가 없습니다. http://jqueryminute.com/set-focus-to-the-next-input-field-with-jquery/

$.fn.focusNextInputField = function() { 
    return this.each(function() { 
     var fields = $(this).parents('form:eq(0),body').find('button,input,textarea,select').not(':hidden'); 
     var index = fields.index(this); 
     if (index > -1 && (index + 1) < fields.length) { 
      fields.eq(index + 1).focus(); 
     } 
     else {fields.first().focus();} 
     return false; 
    }); 
}; 
+0

절대적으로 완벽하고 내가 사용했던 것보다 나은 해결책, 고마워! – Nick

1

나는 당신의 문제는 (적어도 일부 브라우저/운영체제) 비활성화 입력 컨트롤에 포커스를 설정하는 것은 불가능하다고 할 수 있다고 생각합니다.

focus() 호출은 기본적으로 잘못된 블록에 있습니다. if 블록이 아닌 else 블록에 있어야합니다. 이처럼

: 캐시 된이 JQ 객체와 위의 대답의 수정

$("#assessed select").change(function() { 

    if($(this).val() == 'null') { $(this).next('input').attr("disabled", true); } 
    else { $(this).next('input').removeAttr("disabled"); $(this).next('input').focus(); } 
}); 
+0

하! 많은 분들께 감사드립니다. Rob ... 나는 'if'에 초점을두고 'else'에 초점을 맞추 었음을 깨달았습니다! Absolute schoolboy error, 죄송합니다. 많은 감사드립니다. 내가 알기 전까지는 알지 못했습니다. – Nick

+0

여러 번 호출하지 않고 $ (this)를 캐시해야합니다. – redsquare

+0

완료, thanks :) – Nick

14

은 또한 다음 입력을받을 수있는 좋은 작은 플러그인을 찾았나요?
+4

'.not (': hidden')'을 필드 선언에 추가하면 보이는 요소 만 선택됩니다. 또한'else {fields.first(). focus();}'를 추가하여 포커스를 첫 번째 요소로 줄 바꿈하십시오. –

+0

왜 부모님 양식을 찾으십니까 : eq (0) 먼저? – Serge

+0

@Serge 입력 요소가있는 상위 폼을 선택합니다. "eq (0)"이 필요한지, 내 코드 tho가 아닌지 잘 모릅니다. – TimoSolo