2013-03-18 5 views
49

Ich habe folgendes Beispiel:jQuery zu überprüfen, ob <input> existiert und hat einen Wert

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

Gibt es eine Möglichkeit zu überprüfen, ob dieses Element vorhanden ist und einen Wert in einer Anweisung hat? Oder zumindest, etwas kürzer als

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

Gerade hier mit Meile langen Bedingungen frustriert.

+0

Vielleicht machen Sie eine Hilfsfunktion, wenn Sie die gleiche Art von Bedingung mehrmals verwenden. – mirrormx

+1

wenn ($ (selector) .val()) sollte funktionieren. Wenn das Element nicht existiert, wird es 'undefiniert' zurückgeben, und wenn es keine Länge hat, wird es "" zurückgeben (was als falsch bewertet wird). – Benmj

+0

@Benmj würde "undefiniert" auch zu falsch auswerten? Ich dachte es würde nicht. – Dimskiy

Antwort

100

Der Eingang wird einen Wert nicht haben, wenn es nicht existiert. Versuchen Sie, diese ...

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

Ich habe am Ende ein paar kleine Funktionen geschrieben, aber dieses Beispiel wurde auch benutzt. – Dimskiy

+3

@Christian: input1 ist kein HTML-Tag in der obigen Antwort, sondern eine Klasse. –

+3

Ich bin nicht damit einverstanden, auf das value-Attribut des Eingabeelements zu vertrauen. Es kann manchmal leer sein (kein Wert drin), aber immer noch im Bereich vorhanden sein. Also ist es das Beste, sich auf $ ('. Input1'). Length> 0 zu verlassen und dann die Verarbeitung durchzuführen. –

17

Sie könnten tun:

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

length zu false in einem Zustand ausgewertet wird, wenn der Wert 0 ist.

+0

Downvote ohne Kommentar? Warum? –

+0

@MarkWalters: Es gibt keinen Downvote hier, aber es ist nicht viel von einer Verbesserung gegenüber dem Original. –

+0

Ich werde dich aufrütteln Curt. Der Zusatz von .length ist meine Präferenz hier. –

12

Sie können etwas tun:

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

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

nur für das Heck von ihm, ich dies in dem jQuery-Code aufgespürt. Die .val() - Funktion beginnt derzeit bei Zeile 165 von attributes.js. Hier ist der relevante Abschnitt, mit meinen Anmerkungen:

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; 
    } 

Also, entweder Sie undefined oder "" oder null bekommen - all das zu bewerten als falsch in if-Anweisungen.

-1

Ich würde so etwas tun: $('input[value]').something. Dies findet alle Eingaben, die Wert haben und etwas auf sie anwenden.

Verwandte Themen