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.
Vielleicht machen Sie eine Hilfsfunktion, wenn Sie die gleiche Art von Bedingung mehrmals verwenden. – mirrormx
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
@Benmj würde "undefiniert" auch zu falsch auswerten? Ich dachte es würde nicht. – Dimskiy