2 Stimmen

Jquery .attr und .prop löschen das Attribut in Chrome

Sehr seltsamer Fehler, bei dem das folgende Skript den Wert des Attributs vollständig gelöscht hat, anstatt ihn unverändert zu lassen, wenn die Ersatzvariable (im localStorage) nicht gefunden wird.

Mein HTML:

Der JS-Code:

     var thecode = localStorage.getItem("xcode");
     if (thecode != "undefined" && thecode != "null") {
      $(".xfield").attr("value",thecode);
}

Im Grunde funktioniert alles einwandfrei, wenn der xcode-Wert im localStorage gefunden wird und der Standardwert ersetzt wird. Wenn xcode jedoch nicht im localStorage gefunden wird, wird das Ergebnis (und nur in Chrome scheint es so zu sein, Firefox funktioniert einwandfrei und lässt die Dinge auf Standardwert) das Wert-Attribut wird komplett gelöscht.

Ich habe auch versucht, .prop zu verwenden und es in $(window).load(function(){ zu wickeln, aber nichts funktioniert. Irgendwelche Ideen, was ich hier falsch mache?

3voto

epascarello Punkte 194350

Weil "undefiniert" !== undefined und "null" != null

if (thecode!==null) {
    $(".xfield").val(thecode);
}

1voto

T.J. Crowder Punkte 948310

Wenn Ihr Ziel darin besteht, nach undefined oder null zu überprüfen, dann überprüfen Sie undefined oder null, nicht "undefined" und "null" (die weder undefined noch null sind). :-)

var thecode = localStorage.getItem("xcode");
if (thecode != undefined) { // Loose != funktioniert für sowohl undefined als auch null
    $(".xfield").attr("value",thecode);
}

Aber getItem gibt kein undefined zurück (es muss null zurückgeben, wenn der Schlüssel nicht existiert, und einen string [oder sonstige speicherbare Elemente wie ein Canvas] wenn er existiert), also:

var thecode = localStorage.getItem("xcode");
if (thecode !== null) {
    $(".xfield").attr("value",thecode);
}

Wenn der Code im Fall, den Sie interessiert, immer nicht leer sein wird, können Sie einfach thecode direkt überprüfen:

var thecode = localStorage.getItem("xcode");
if (thecode) {
    $(".xfield").attr("value",thecode);
}

Das wird es für jeden wahren Wert setzen. undefined, null und "" sind alles falsche Werte (genauso wie 0, NaN und false, aber diese werden Sie nicht von getItem zurückbekommen).

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X