2009-08-05 16 views
7

Mam obecnie skrypt, który sprawdzi wartość pola wyboru, a następnie włącz pole tekstowe tuż obok niego, a następnie mam nadzieję, że ustawi ostrość.Ustawianie fokusu na następne wejście w jQuery?

mam to w momencie, który działa dobrze na celu umożliwienie pole wprowadzania ...

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

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

}); 

Jestem nieco zakleszczony na „FOCUS” bit szczerze mówiąc, próbowałem „$ (this) .next ("input"). focus(); " ale to się nie skupiło, chociaż nie wywołało błędu JavaScript ...

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

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

}); 

Jakieś pomysły, chłopaki? Naprawdę utknąłem na tym i byłoby to bardzo proste, ale bardzo przydatne uzupełnienie strony, którą buduję!

Dzięki

+0

mógłbyś pisać kod HTML, jak również? – RaYell

Odpowiedz

5

modyfikacja powyższego odpowiedź z pamięci podręcznej tego obiektu JQ. Również filtr wewnątrz obok nie jest potrzebny. next() zwróci tylko następne rodzeństwo. Filtr zasadniczo mówi, że otrzymasz następny tylko wtedy, gdy jest to wejście lub filtr, który podasz. Jeśli jesteś pewien, że następny jest pożądanym obiektem, nie ma potrzeby dołączania filtra.

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

Absolutnie doskonałe, a dużo lepsze rozwiązanie niż to, z czego korzystałem, dziękuję! – Nick

1

Myślę, że problemem może być to, że nie jest możliwe, aby ustawić ostrość na niepełnosprawnego kontroli wejściowej (przynajmniej w niektórych przeglądarkach/systemów operacyjnych).

Twoje połączenie focus() jest po prostu w niewłaściwym bloku - powinno być w bloku else, a nie w bloku if.

Jak to:

$("#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

Hah! Wielkie dzięki Rob ... Właśnie zdałem sobie sprawę, że kładę nacisk na "jeśli", a nie "jeszcze"! Absolutny błąd ucznia, przepraszam i bardzo dziękuję - nie było, dopóki nie napisałeś, że zrozumiałem :) – Nick

+0

Pamiętaj, aby cache the $ (this) zamiast wywoływać go wiele razy – redsquare

+0

Zrobione, dzięki :) – Nick

14

Także miły mały plugin, aby uzyskać następnego wejścia: 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; 
    }); 
}; 
+4

Chciałbym dodać '.not (': hidden')' do deklaracji pól, więc wybrane są tylko widoczne elementy. Ponadto dodaj 'else {fields.first(). Focus();}', aby skupić się na pierwszym elemencie. –

+0

Dlaczego szukacie rodziców: najpierw eq (0)? – Serge

+0

@Serge wybiera macierzystą formę, w której znajduje się element wejściowy. Nie wiem, czy konieczne jest "eq (0)", a nie mój kod, więc nie jestem pewien. – TimoSolo

Powiązane problemy