Überprüfen Sie, ob ein HTML-Eingabeelement leer ist oder keinen vom Benutzer eingegebenen Wert hat

Lesezeit: 4 Minuten

Benutzeravatar von zik
zik

Bezogen auf diese Frage hier. Kann ich überprüfen, ob ein Element im DOM einen Wert hat oder nicht? Ich versuche, es in eine ‘if’-Anweisung zu packen und bin mir nicht sicher, ob mein Ansatz richtig ist. Hier geht:

if (document.getElementById('customx')){
    //do something
}

Oder sollte es heißen:

if (document.getElementById('customx') == ""){
    //do something
}

EDIT: Mit Wert meine ich, customx ist ein Texteingabefeld. Wie kann ich überprüfen, ob in dieses Feld kein Text eingegeben wurde?

  • Definiere “Wert”. Du meinst Textinhalte? untergeordnete Elemente? A value Attribut?

    – Herr Lister

    10. Januar 2012 um 12:42 Uhr

  • Was meinst du mit Wert? <input type="text" value="myValue"> oder <span>myValue</span>?

    – Jonas Høgh

    10. Januar 2012 um 12:42 Uhr


  • Hallo, tut mir leid, ich hätte meine Frage deutlicher formulieren sollen. Ich habe meine Frage aktualisiert

    – zik

    10. Januar 2012 um 12:43 Uhr

Benutzeravatar von Jonas Høgh
Jonas Hogh

Der getElementById -Methode gibt ein Element-Objekt zurück, das Sie verwenden können, um mit dem Element zu interagieren. Wenn das Element nicht gefunden wird, null ist zurück gekommen. Im Falle eines Eingabeelements, der value Die Eigenschaft des Objekts enthält die Zeichenfolge im Attribut value.

Unter Ausnutzung der Tatsache, dass die && Bedienerkurzschlüsse, und zwar beides null und die leere Zeichenfolge in einem booleschen Kontext als “falsch” betrachtet werden, können wir die Prüfungen auf Elementexistenz und Vorhandensein von Wertdaten wie folgt kombinieren:

var myInput = document.getElementById("customx");
if (myInput && myInput.value) {
  alert("My input has a value!");
}

  • @simon Funktioniert gut auf Chrome für mich. Denken Sie daran, dass Sie nicht auf die Elemente des Dokumentobjekts zugreifen können, bis das DOMContentLoaded-Ereignis ausgelöst wurde developer.mozilla.org/en-US/docs/Web/API/Window/…

    – Jonas Høgh

    28. Januar 2020 um 9:46 Uhr

  • Danke, lassen Sie mich auschecken und ich habe ein Problem, das ich Ihnen sagen werde

    – Simon

    30. Januar 2020 um 16:21 Uhr

getElementById gibt false zurück, wenn das Element nicht im DOM gefunden wurde.

var el = document.getElementById("customx");
if (el !== null && el.value === "")
{
  //The element was found and the value is empty.
}

var input = document.getElementById("customx");

if (input && input.value) {
    alert(1);
}
else {
    alert (0);
}

Deine erste war im Grunde richtig. Das, FYI, ist schlecht. Es führt eine Gleichheitsprüfung zwischen einem DOM-Knoten und einer Zeichenfolge durch:

if (document.getElementById('customx') == ""){

DOM-Knoten sind eigentlich ihre eigene Art von JavaScript-Objekten. Daher würde dieser Vergleich überhaupt nicht funktionieren, da er einen Gleichheitsvergleich für zwei deutlich unterschiedliche Datentypen durchführt.

Sie wollen:

if (document.getElementById('customx').value === ""){
    //do something
}

Der value -Eigenschaft gibt Ihnen einen Zeichenfolgenwert und Sie müssen diesen mit einer leeren Zeichenfolge vergleichen.

  • Denk daran, dass " " ist anders als "" aber schwer auf dem Bildschirm zu erkennen.

    – QUentin

    10. Januar 2012 um 12:58 Uhr

  • Beachten Sie, dass dies abstürzt, wenn das Element nicht vorhanden ist.

    – Jonas Høgh

    10. Januar 2012 um 13:00 Uhr

Benutzeravatar von mlhDev
mlhDev

var myInput = document.getElementById("customx");
if (myInput.value.length > 0) {
  //do something;
}

(.length > 0 ist eine weitere Möglichkeit, das Eingabeelement zu überprüfen)

  • Denk daran, dass " " ist anders als "" aber schwer auf dem Bildschirm zu erkennen.

    – QUentin

    10. Januar 2012 um 12:58 Uhr

  • Beachten Sie, dass dies abstürzt, wenn das Element nicht vorhanden ist.

    – Jonas Høgh

    10. Januar 2012 um 13:00 Uhr

Leer ist nicht dasselbe wie “kein Wert”.

HTMLInputElement.value Ist '' wenn Sie einen ungültigen Eintrag haben. Wenn .value ist nicht '', dann ist es nicht leer. Das ist definitiv, aber da gibt es Zeiten, in denen .value === '' aber nicht leer, müssen wir testen. Beispielsweise in Chrome mit a number Eingabetyp, wenn Sie eingeben . oder e es wird in das Eingabefeld eingefügt, aber .value ändert sich nicht von '' weil es ungültig ist.

<input type=number>

Wir können den Browser um weitere Informationen bitten und dankenswerterweise ValidityState wird hervorragend unterstützt. Wenn es keinen Wert gibt, aber der Browser sagt, dass es eine schlechte Eingabe gibt, dann ist es im Grunde nicht leer.

function isInputEmpty(input) {
  return !input.value && !input.validity.badInput;
}

Bearbeiten: Credits an @osullic, um dies in der Spezifikation zu finden:

Der Wert eines Steuerelements ist sein interner Zustand. Daher stimmt es möglicherweise nicht mit der aktuellen Eingabe des Benutzers überein.

https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#a-form-control’s-value

  • Dies ist eine interessante Antwort, aber es wäre gut, wenn Sie auf eine Referenz verlinken könnten. Ich möchte sicher sein, dass ich mich über Standardbrowser hinweg wirklich darauf verlassen kann HTMLInputElement.value ändert sich nicht von ”, es sei denn, die Eingabe besteht die Validierung.

    – osulisch

    29. November 2022 um 14:11 Uhr

  • Die Spezifikation scheint tatsächlich mit dem übereinzustimmen, was Sie sagen: https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#a-form-control’s-value

    – osulisch

    29. November 2022 um 14:49 Uhr

  • @osullic Danke für den Hinweis. Ich habe das entdeckt, weil ich versuche, es umzusetzen HTMLInputElement mit Webkomponenten und versuche, die Spezifikation genau zu befolgen. Es gibt eine Möglichkeit, mit zu erkennen :placeholder-shownaber Sie benötigen einen Platzhalter (auch wenn er leer ist), und das kann sich dann auf die Textauswahl auswirken. badInput scheint kompatibler zu sein.

    – ShortFuse

    29. November 2022 um 16:39 Uhr

1445380cookie-checkÜberprüfen Sie, ob ein HTML-Eingabeelement leer ist oder keinen vom Benutzer eingegebenen Wert hat

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy