我正在創建一個表單,并且該onsubmit屬性有一個表單驗證布爾方法。在該方法結束時,無論是否回傳無效輸入都無關緊要false,sessionStorage變數將被更新,true以便在再次加載頁面時重新檢查變數。為什么false無論是否沒有輸入回傳,變數仍然是false?請記住,表單action屬性會指向同一個頁面(表單頁面)。這是我的驗證方式:
<form action="form.jsp" onsubmit="return validate()">
<input type="text" id="foo" />
<input type="submit">
</form>
var input=document.getElementById("foo"); // textbox
function validate()
{
if (input.value.trim() === "") {
return false;
}
sessionStorage.setItem("submitted","true");
}
請記住,所有表單輸入都存在,并且即使在函式沒有 return 之后 sessionStorage 變數也不會更新false。
uj5u.com熱心網友回復:
嘗試將 sessionStorage 呼叫包裝在 try/catch 中以查看它失敗的原因。
function validate() {
var input = document.getElementById("foo"); // textbox
console.log('validate', input);
if (input.value.trim() === "") {
return false;
}
try {
sessionStorage.setItem("submitted", "true");
} catch (e) {
console.log(e);
return false;
}
// (for demostration purposes return false)
return false;
}
<form onsubmit="return validate()">
<input type="text" id="foo" />
<input type=submit>
</form>
或者,您可以使用 DevTools 中的“保留日志”復選框來保留控制臺錯誤。
uj5u.com熱心網友回復:
查看您的jsfiddle代碼,原因是因為您正在檢查其值,如下所示:
if (sessionStorage.getItem("submitted") == true)
這不準確,因為存盤在那里的資料是一個字串......所以要解決這個問題,你可以這樣做:
if (sessionStorage.getItem("submitted") == 'true')
實際上,你不能連查它是這樣的:
if (sessionStorage.getItem("submitted"))
因為這將回傳true任何非空值,甚至'false'.
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/318166.html
標籤:javascript dom
上一篇:如何通過url從站點獲取所有圖示
