2013-03-18 9 views
49

ho il seguente esempio:verificare se jQuery <input> esiste e ha un valore

<input type="text" class="input1" value="bla"/> 

C'è un modo per verificare se questo elemento esiste e ha un valore in una dichiarazione? O, almeno, nulla di più breve quindi

if($('.input1').length > 0 && $('input1').val() != '') 

Proprio frustrato qui con condizioni chilometriche.

+0

Forse si può fare una funzione di supporto se si utilizza lo stesso tipo di condizione molte volte. – mirrormx

+1

se ($ (selector) .val()) dovrebbe funzionare. Se l'elemento non esiste restituirà 'indefinito' e se lo fa ma non ha lunghezza restituirà "" (che valuta come falso). – Benmj

+0

@Benmj sarebbe "indefinito" anche come falso? Pensavo che non fosse così. – Dimskiy

risposta

100

L'ingresso non avrà un valore se non esiste. Prova questo ...

if($('.input1').val()) 
+0

Ho finito per scrivere alcune piccole funzioni, ma anche questo esempio è stato utilizzato. – Dimskiy

+3

@Christian: input1 non è un tag html nella risposta sopra ma è una classe. –

+3

Non completo accetto di fidarsi dell'attributo value dell'elemento input. Può essere a volte vuoto (nessun valore al suo interno), ma essere ancora presente nell'oscilloscopio. Quindi il meglio è fare affidamento su $ ('. Input1'). Length> 0 e quindi fare qualsiasi elaborazione. –

17

si potrebbe fare:

if($('.input1').length && $('.input1').val().length) 

length viene valutato come false in una condizione, quando il valore è 0.

+0

Downvote senza commenti? perché? –

+0

@MarkWalters: Non c'è alcun downvote qui, ma non è un miglioramento rispetto all'originale. –

+0

Ti inviterò a Curt. L'aggiunta di .length è la mia preferenza qui. –

12

si può fare qualcosa di simile:

jQuery.fn.existsWithValue = function() { 
    return this.length && this.val().length; 
} 

if ($(selector).existsWithValue()) { 
     // Do something 
} 
5

Solo per il gusto di farlo, ho rintracciato questo nel codice jQuery. La funzione .val() inizia attualmente alla riga 165 di attributes.js. Ecco la relativa sezione, con le mie annotazioni:

val: function(value) { 
    var hooks, ret, isFunction, 
     elem = this[0]; 

     /// NO ARGUMENTS, BECAUSE NOT SETTING VALUE 
    if (!arguments.length) { 

     /// IF NOT DEFINED, THIS BLOCK IS NOT ENTERED. HENCE 'UNDEFINED' 
     if (elem) { 
      hooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ]; 

      if (hooks && "get" in hooks && (ret = hooks.get(elem, "value")) !== undefined) { 
       return ret; 
      } 

      ret = elem.value; 

      /// IF IS DEFINED, JQUERY WILL CHECK TYPE AND RETURN APPROPRIATE 'EMPTY' VALUE 
      return typeof ret === "string" ? 
       // handle most common string cases 
       ret.replace(rreturn, "") : 
       // handle cases where value is null/undef or number 
       ret == null ? "" : ret; 
     } 

     return; 
    } 

Così, potrete sia ottenere undefined o "" o null - che valuta in falso in istruzioni if.

-1

Vorrei fare qualcosa del genere: $('input[value]').something. Questo trova tutti gli input che hanno valore e operano su di essi.

Problemi correlati