2009-08-05 16 views
7

Attualmente ho uno script che controllerà il valore di una casella di selezione, quindi abiliterà un campo di testo proprio accanto ad esso, e quindi si spera di impostare lo stato attivo.Impostare lo stato attivo sull'ingresso successivo in jQuery?

ho questo al momento che funziona bene a consentire il campo di inserimento ...

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

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

}); 

io sono un po 'bloccato sulla punta 'focus' a dire il vero, ho provato "$ (questo) .Next ('input') messa a fuoco();". ma questo non si focalizzò affatto, anche se non portò un errore 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"); } 

}); 

Qualche idea per favore ragazzi? Sono davvero bloccato su questo e sarebbe un'aggiunta molto semplice, ma molto utile alla pagina che sto costruendo!

Grazie

+0

Potrebbe pubblicare il tuo codice HTML come bene? – RaYell

risposta

5

Modificata della risposta di cui sopra con cache questo oggetto JQ. Anche il filtro interno non è necessario. next() restituirà sempre il fratello successivo. Il filtro sta fondamentalmente dicendo di darmi il prossimo solo se si tratta di un input o di qualunque filtro tu fornisca. Se sei sicuro che il prossimo è l'oggetto desiderato, non è necessario includere il filtro.

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

Assolutamente perfetto, e molto soluzione migliore di quello che stavo usando, grazie! – Nick

1

penso che il problema potrebbe essere che non è possibile impostare la messa a fuoco di un controllo di input invalido (almeno in alcuni sistemi operativi/browser).

La tua chiamata focus() è fondamentalmente nel blocco errato - dovrebbe essere nel blocco else, non nel blocco if.

Ti piace questa:

$("#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! Molte grazie Rob ... Mi sono appena reso conto di mettere l'attenzione sul 'se' e non sul 'altro'! Errore scolarista, mi spiace e molte grazie - non è stato fino a quando hai postato che mi sono reso conto :) – Nick

+0

Ricordati di mettere in cache $ (questo) piuttosto che chiamarlo più volte – redsquare

+0

Fatto, grazie :) – Nick

14

trovato anche un bel po 'di plugin per ottenere il prossimo ingresso: 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

Vorrei aggiungere '.not (': hidden')' alla dichiarazione dei campi, quindi sono selezionati solo gli elementi visibili. Inoltre, aggiungi 'else {fields.first(). Focus();}' per focalizzarsi sul primo elemento. –

+0

Perché cerchi la forma dei genitori: eq (0) prima? – Serge

+0

@Serge seleziona la forma padre in cui si trova l'elemento di input. Non so se è necessario "eq (0)", non il mio codice, quindi non sono sicuro. – TimoSolo

Problemi correlati