Wie kann ich querySelector aktivieren, um ein Eingabeelement nach Namen auszuwählen?

74

Ich habe vor kurzem Hilfe auf dieser Website zu erreichen , die querySelectorauf einem Formular Eingabe wie selectaber sobald ich nahm , <select>um es völlig verändert , was in der Funktion getan werden mußte.

HTML:

<form onsubmit="return checkForm()">
    Password: <input type="text" name="pwd">
    <input type="submit" value="Submit">
</form>

Javascript:

<script language="Javascript" type="text/javascript">
    debugger;
    function checkForm() {
        var form = document.forms[0];
        var selectElement = form.querySelector('');
        var selectedValue = selectElement.value;

        alert(selectedValue);
</script>

Früher hatte ich ('select')für die querySelector, aber jetzt bin ich mir nicht sicher, was ich dort setzen soll.
Ich habe auch mehrere Dinge ausprobiert, querySelectorAllaber ich kann es scheinbar nicht herausfinden.

Um klar zu sein, versuche ich das zu ziehen name="pwd".

Wie könnte ich das machen?

Anthony Tobuscus
quelle
Die querySelectorMethode akzeptiert ein selectorArgument. Das selectorArgument ist eine Zeichenfolge, die einen oder mehrere durch Kommas getrennte CSS-Selektoren enthält. Wenn Sie jemals an gültigen Selektoren festgehalten haben, hat das MDN eine großartige Seite mit Selektoren . Natürlich können Sie auch bei SO immer Hilfe bekommen. Ich dachte nur, Sie könnten die Seite als praktische Referenz für allgemein finden :)
Nein,

Antworten:

123

Sie können 'input [name = "pwd"]' versuchen:

function checkForm(){
     var form = document.forms[0];
     var selectElement = form.querySelector('input[name="pwd"]');
     var selectedValue = selectElement.value;
}

Schauen Sie sich diese http://jsfiddle.net/2ZL4G/1/ an.

AlexCheuk
quelle
1
Ich habe es versucht, aber nichts scheint zu mir zurückzukehren und ich bekomme keine Warnung
Anthony Tobuscus
Hmm, wth .. Ich habe das so oft versucht und es funktioniert immer noch nicht mit dieser Methode, aber es funktioniert in jsfiddle? vermisse ich etwas Außerdem wird es in der Adressleiste angezeigt, sodass ich weiß, dass es die Eingabe erhält, nur dass ich keine Benachrichtigungen erhalte
Anthony Tobuscus
@AnthonyTobuscus: Wenn Ihr Code noch die debugger;Anweisung enthält, kann dies dazu führen, dass der Rest des Codes nicht ausgeführt wird, da dies die Ausführung in dieser Zeile stoppen würde.
Nein,
Ich habe es jedoch ohne es versucht und mehrere andere Versionen dieses Codes, ich werde weiterhin eine Antwort finden und wenn ich es tue, werde ich es hier posten, danke für die Zeit :)
Anthony Tobuscus
2
Die Anführungszeichen pwdscheinen nicht notwendig zu sein
Benjamin
25

Ich weiß, dass dies alt ist, aber ich hatte kürzlich das gleiche Problem und konnte das Element auswählen, indem ich nur auf das folgende Attribut zugegriffen habe: document.querySelector('[name="your-selector-name-here"]');

Nur für den Fall, dass jemand dies jemals brauchen würde :)

Ciprian Tepes
quelle
1
Bei der Chrome-Version 78.0.3904.70 (Official Build) (64-Bit), bei der querySelector nur mit der Eigenschaft name verwendet wird, wird nur das erste Element zurückgegeben, sodass Sie den Array-Zugriff nicht verwenden können, um auf andere Optionsfelder im Set zuzugreifen. Stattdessen müssen Sie entweder jedem Optionsfeld eine eindeutige ID oder einen eindeutigen Wert zuweisen (dies ist die normale Methode zur Unterscheidung von Optionsfeldern). Da document.getElementsByName () in HTML5 abgeschrieben wird, ist document.querySelector ('[name = "Optionsfeldname"] [value = "unique-value"]') der beste Ersatz.
Howard Brown
1
@HowardBrown, aber wenn Sie das Array von Elementen haben möchten, würde querySelectorAll nicht besser funktionieren?
Ciprian Tepes
1
Nur teilen, um den Wert zu erhalten, fügen Sie einfach .valueam Ende dieses Codes hinzu, zB:document.querySelector('[name="your-selector-name-here"]').value
Marwan Salim
10

1- Sie müssen den Block der Funktion mit '}' schließen, was fehlt.

2- Das Argument von querySelector darf keine leere Zeichenfolge '' oder '' sein ... Verwenden Sie '*' für alle.

3- Diese Argumente geben den erforderlichen Wert zurück:

querySelector('*')

querySelector('input')

querySelector('input[name="pwd"]')

querySelector('[name="pwd"]')
TROUZINE Abderrezaq
quelle
0

Diese Beispiele scheinen etwas ineffizient zu sein. Versuchen Sie dies, wenn Sie auf den Wert reagieren möchten:

<input id="cta" type="email" placeholder="Enter Email...">
<button onclick="return joinMailingList()">Join</button>

<script>
    const joinMailingList = () => {
        const email = document.querySelector('#cta').value
        console.log(email)
    }
</script>

Wenn Sie ein thisSchlüsselwort mit einem fetten Pfeil ( =>) verwenden, tritt ein Problem auf . Wenn Sie das tun müssen, gehen Sie zur alten Schule:

<script>
    function joinMailingList() {
        const email = document.querySelector('#cta').value
        console.log(email)
    }
</script>

Wenn Sie mit Passworteingaben arbeiten, sollten Sie diese verwenden, type="password"damit ****** angezeigt wird, während der Benutzer tippt, und es ist auch semantischer.

agm1984
quelle
0

Also ... müssen Sie einige Dinge in Ihrem Code ändern

<form method="POST" id="form-pass">
Password: <input type="text" name="pwd" id="input-pwd">
<input type="submit" value="Submit">
</form>

<script>
var form = document.querySelector('#form-pass');
var pwd = document.querySelector('#input-pwd');
pwd.focus();
form.onsubmit = checkForm;

function checkForm() {
  alert(pwd.value);
}
</script>

Versuchen Sie es auf diese Weise.

Cleyton Brasilien
quelle
0

querySelector()stimmte mit der ID im Dokument überein. Sie müssen die ID des Passworts eingeben.html

Dann gib es weiter querySelector()mit #symbol & .value property.

Beispiel:

let myVal = document.querySelector('#pwd').value

Piyu
quelle