簡體   English   中英

防止警報后刷新頁面

[英]Prevent refresh of page after alert

我正在嘗試驗證表單。 我在這方面取得了成功,但如果警報啟動,頁面會刷新,因為我使用的是彈出窗口,所以這個窗口會關閉,我必須再次打開它。 我需要在誤點擊的情況下防止這種情況發生。

這是代碼:

HTML

   <div class="row">
                        <form action="" method="" id="formBoard" name="formOfBoard">
                            <div class="col-75">
                                <label for="bname">Name of the Board: </label><br>
                                <input type="text" id="boardname" name="boardname">
                            </div>
                            <div class="row">
                                <div class="col-75">
                                    <label for="ipadd">IP Address:</label><br>
                                    <input type="text" name="ipadd" id="ipaddress">
                                </div>
                            </div>
                            <div class="row">
                                <div class="col-75">
                                    <label for="portnum">Port:</label><br>
                                    <input type="text" name="portnum" id="portnum">
                                </div>
                            </div>
                            <div class="row">
                                <div class="col-75">
                                    <label for="imgadd">Upload image:</label><br>
                                    <img src="node_modules/@tabler/icons/icons-png/file-upload.png" alt="Insert image" class="insrtimg" name="imageboard" id="insertimage">
                                </div>
                            </div>
                            <div class="row">
                                <div class="col-80">
                                    <div>
                                        <div class="btnfrm" style="background-color: #F30D0DBF; color:antiquewhite" onclick="closeForm()">Discard</div>
                                        <input type="submit" class="btnfrm" style="background-color: rgb(67, 221, 67);" value="Save" onclick="validateIndexForm()">
                                    </div>
                                </div>
                            </div>
                        </form>
                    </div>
                </form>
            </div>

JavaScript

function validateIndexForm(){
    let x = document.getElementById("boardname").value;
    let y = document.getElementById("ipaddress").value;
    let z = document.getElementById("portnum").value;
    let w = document.getElementById("insertimage").value;
    let ipfrmt = /^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/;;
if(x == ""){
    alert("Please insert the boards name");
    return false;
}
if(!y.match(ipfrmt)){
    alert("Please insert a valid IP address");
    return false;
}
if(z != isNaN() && !(z > 0)){
    alert("Please insert the correct port");
    return false;
}
return x, y, z;

}

重新加載的可能原因可能是表單操作將默認值返回到 URL,這意味着它會導致新的導航(這可以在開發控制台中看到,例如 chrome,通過開發工具打開它喜好。

我僅使用 HTML/JavaScript 對此進行了測試,因此不確定應用程序的其他部分在做什么,但希望這會有所幫助。

  • 將按鈕 onclick 更改為提交操作的表單
  • 通過事件傳遞到 function
  • 發生錯誤時防止默認
<div class="row">
<form action="" method="" id="formBoard" name="formOfBoard" onsubmit="validateIndexForm(event)">
    <div class="col-75">
        <label for="bname">Name of the Board: </label><br>
        <input type="text" id="boardname" name="boardname">
    </div>
    <div class="row">
        <div class="col-75">
            <label for="ipadd">IP Address:</label><br>
            <input type="text" name="ipadd" id="ipaddress">
        </div>
    </div>
    <div class="row">
        <div class="col-75">
            <label for="portnum">Port:</label><br>
            <input type="text" name="portnum" id="portnum">
        </div>
    </div>
    <div class="row">
        <div class="col-75">
            <label for="imgadd">Upload image:</label><br>
            <img src="node_modules/@tabler/icons/icons-png/file-upload.png" alt="Insert image" class="insrtimg" name="imageboard" id="insertimage">
        </div>
    </div>
    <div class="row">
        <div class="col-80">
            <div>
                <div class="btnfrm" style="background-color: #F30D0DBF; color:antiquewhite" onclick="closeForm()">Discard</div>
                <input type="submit" class="btnfrm" style="background-color: rgb(67, 221, 67);" value="Save" >
            </div>
        </div>
    </div>
</form>
</div>
</form>
</div>
function validateIndexForm(event){
    let x = document.getElementById("boardname").value;
    let y = document.getElementById("ipaddress").value;
    let z = document.getElementById("portnum").value;
    let w = document.getElementById("insertimage").value;
    let ipfrmt = /^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/;;
    if(x == ""){
        event.preventDefault();
        alert("Please insert the boards name");
        return false;
    }
    if(!y.match(ipfrmt)){
        event.preventDefault();
        alert("Please insert a valid IP address");
        return false;
    }
    if(z != isNaN() && !(z > 0)){
        event.preventDefault();
        alert("Please insert the correct port");
        return false;
    }
    return x, y, z;
}

注意:為了進一步改進重復的代碼行(防止默認),可以將 function 分解為根據輸入返回 true 或 false 的驗證 function。

暫無
暫無

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

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