Ich habe folgendes Beispiel:
<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ürzeres
if($('.input1').length > 0 && $('input1').val() != '')
Ich bin hier nur frustriert von kilometerlangen Bedingungen.
javascript
jquery
Dimskiy
quelle
quelle
if ($('#foobar').val()) { console.log('You will not see this') }
Antworten:
Die Eingabe hat keinen Wert, wenn sie nicht vorhanden ist. Versuche dies...
if($('.input1').val())
quelle
if("") { true } else { false }
Dies ist also die richtige Antwort.Du könntest es tun:
if($('.input1').length && $('.input1').val().length)
length
wirdfalse
in einer Bedingung ausgewertet , wenn der Wert ist0
.quelle
Sie können so etwas tun:
jQuery.fn.existsWithValue = function() { return this.length && this.val().length; } if ($(selector).existsWithValue()) { // Do something }
quelle
Nur zum Teufel habe ich das im jQuery-Code aufgespürt. Die Funktion .val () beginnt derzeit in Zeile 165 von attribute.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; }
Sie erhalten also entweder
undefined
oder""
odernull
- alle werden in if-Anweisungen als falsch bewertet.quelle
Sie können Ihren eigenen benutzerdefinierten Selektor erstellen
:hasValue
und diesen dann zum Suchen, Filtern oder Testen anderer jQuery-Elemente verwenden.jQuery.expr[':'].hasValue = function(el,index,match) { return el.value != ""; };
Dann finden Sie folgende Elemente:
var data = $("form input:hasValue").serialize();
Oder testen Sie das aktuelle Element mit
.is()
var elHasValue = $("#name").is(":hasValue");
Code-Snippet anzeigen
jQuery.expr[':'].hasValue = function(el) { return el.value != ""; }; var data = $("form input:hasValue").serialize(); console.log(data) var elHasValue = $("[name='LastName']").is(":hasValue"); console.log(elHasValue)
label { display: block; margin-top:10px; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <form> <label> First Name: <input type="text" name="FirstName" value="Frida" /> </label> <label> Last Name: <input type="text" name="LastName" /> </label> </form>
Weiterführende Literatur :
:contains
unabhängig von Groß- und Kleinschreibungquelle
if($('#user_inp').length > 0 && $('#user_inp').val() != '') { $('#user_inp').css({"font-size":"18px"}); $('#user_line').css({"background-color":"#4cae4c","transition":"0.5s","height":"2px"}); $('#username').css({"color":"#4cae4c","transition":"0.5s","font-size":"18px"}); }
quelle
Ich würde so etwas machen :
$('input[value]').something
. Dies findet alle Eingänge, die Wert haben und bearbeitet etwas auf sie.quelle