簡體   English   中英

如何將我的表單與document.querySelector相關聯?

[英]How can I associate my form with document.querySelector?

我不知道如何將以下條件反應鏈接到passid表單輸入id:

我不知道將document.querySelector放在何處,以便索引的contion-reactions將與之關聯。

這是代碼:

<!doctype html>
<html>
    <head>
        <meta charset="utf-8">
        <title>Password - form</title>
    </head>

    <body>

        <form>
            <label>Password</label>
            <input type="password" id="passid" />
            <br>
            <input type="submit" value="Sign In" />
        </form>

        <script>

            function passType() {
                var password = ["p1", "p2", "p3", "p4", "p5"];

                if (password.indexOf > -1) {
                    alert("That's great! Thank you!");
                } else {
                    alert("Wrong, try again");
                }

                if (password.indexOf > -1) {
                    alert("It's wrong, you have one more try...");
                } else {
                    alert("Get out now!");
                    window.close();
                }
            }
        passType();

    </script>
    </body>
</html>

這些是我想要關注的一些要點

  1. 要使用查詢選擇器選擇特定元素,請記住以下內容:
    • 如果您碰巧知道元素的id ,請使用document.getElementById(id) 這是最突出的選擇方式,因為通常id對於所有元素都是唯一的。
    • 如果您碰巧知道元素的 ,請使用document.getElementsByClassName(class) 此方法具有一定的風險,因為可能有多個具有相同類的元素。
    • 如果您碰巧知道元素的tagName ,請使用document.getElementsByTagName(tag)
    • 實現元素選擇的最簡單方法是使用document.querySelector('tag'/ '.class'/ '#id') . document.querySelector('tag'/ '.class'/ '#id') 您可以在這里參考更多有關相同的內容。
  2. 現在,您需要了解您的函數passType() ,此處驗證基於您定義的密碼數組的輸入密碼, 只有在用戶輸入密碼並單擊登錄按鈕后才需要調用。

    為了實現這一點,您必須 submit事件綁定EventListener 這可以通過使用document.querySelector('form').addEventListener('submit', passType);來實現document.querySelector('form').addEventListener('submit', passType);

  3. 現在最后,根據您提供的代碼段,您希望為用戶提供第二次機會 ,以防用戶在第一次嘗試時輸入錯誤的密碼。 為此,您必須將嘗試計數 存儲在變量中。 此外, 提交操作按鈕的EventListener保持冒泡,為了防止它,您需要使用event.preventDefault()

牢記這一切,我相信這將解決您的問題。 這是經過糾正的代碼段:

 <!doctype html> <html> <head> <meta charset="utf-8"> <title>Password - form</title> </head> <body> <form> <label>Password</label> <input type="password" id="passid"/> <br> <input type="submit" value="Sign In"/> </form> <script> var attemptCount = 0; function passType(event) { event.preventDefault(); var enteredValue = document.querySelector('form').querySelector('#passid').value; var password = ['p1', 'p2', 'p3', 'p4', 'p5']; if (password.indexOf(enteredValue) > -1) { alert("That's great! Thank you!"); } else { attemptCount++; alert('Wrong, try again'); if (attemptCount <= 1) { alert("It's wrong, you have one more try..."); document.querySelector('form').querySelector('#passid').value = ''; } else { alert('Get out now!'); window.close(); } } } document.querySelector('form').addEventListener('submit', passType); </script> </body> </html> 

隨意詢問您對此有任何疑問。

我想你問的是如何獲得用戶輸入密碼字段的值。 那是document.getElementById("passid").value 所以你會寫:

if (password.indexOf(document.getElementById("passid").value) > -1) {
    alert("That's great! Thank you!");
}

請注意,在腳本的頂級調用passType()將不起作用。 這將在首次加載頁面時運行,而不是等待用戶填寫密碼。 您應該在用戶提交表單時調用它。 你應該做:

document.querySelector("form").addEventListener("submit", passAll);

您還應該更改passAll()函數,以便在用戶輸入錯誤密碼時調用Event.preventDefault() ,以防止提交表單。 看到

在addEventListener提交仍然提交表單時返回false?

此外,在客戶端Javascript中檢查密碼不是很安全。 沒有什么能阻止用戶修改腳本或繞過腳本。 應在服務器上檢查密碼,以便用戶無法覆蓋密碼。

如何使用查詢選擇器訪問表單?

let frm = document.querySelector('form');

然后聽取它的submit事件。

frm.addEventListener('submit', passType);

如何訪問輸入密碼?

您需要更改您的功能。 首先將以下內容添加到“passType”函數的頂部。 以下代碼段將用戶輸入保存到變量pass

let p = frm.querySelector('#passid');//Get the DOM node
let pass = p.value;//Get the input value

現在將if (password.indexOf > -1)修改為if (password.indexOf(pass) > -1)以檢查實際輸入。

DEMO

 <!doctype html> <html> <head> <meta charset="utf-8"> <title>Password - form</title> </head> <body> <form> <label>Password</label> <input type="password" id="passid" /> <br> <input type="submit" value="Sign In" /> <!-- We also have input type = "button" and events for both >>> onsubmit & onclick. --> </form> <script> function passType() { let p = frm.querySelector('#passid'); let pass = p.value; var password = ["p1", "p2", "p3", "p4", "p5"]; if (password.indexOf(pass) > -1) { alert("That's great! Thank you!"); } else { alert("Wrong, try again"); if (password.indexOf(pass) > -1) { alert("It's wrong, you have one more try..."); } else { alert("Get out now!"); window.close(); } } } let frm = document.querySelector('form'); frm.addEventListener('submit', passType); </script> </body> </html> 

如果您正在尋找在表單提交時使用密碼字段執行某些操作的方法,您可能需要以下內容:

 // listen for submit events on the form document.querySelector('form').addEventListener('submit', doSubmit); // our form submit handler function doSubmit(event) { // prevent submission event.preventDefault(); event.stopPropagation(); // get the password field // event.target is the form // could alternatively query by id using document.getElementById('passid') var passwordField = event.target.querySelector('#passid'); // do something with the field or its value console.log(passwordField.value); return false; } 
 <form> <label>Password</label> <input type="password" id="passid" /> <input type="submit" value="Sign In" /> </form> 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM