在寫Django項目時,用到以前寫的一個登錄界面,裏面用JQ給from表單綁定了幾個簡單的校驗事件,而後今天在將表單提交到後臺的時候,當校驗不經過時仍然刷新了頁面,形成JQ的提示文本不能正常顯示,因而就想到了怎麼去阻止form表單的提交javascript
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta http-equiv="content-Type" charset="UTF-8"> <meta http-equiv="x-ua-compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>Title</title> <link rel="stylesheet" href="/static/bootstrap-3.3.7/css/bootstrap.css"> <style> body { background-color: #eeeeee; } .login-box { margin-top: 50px; } </style> </head> <body> <div class="container"> <div class="row"> <div class="col-md-4 col-md-offset-4 login-box"> <form class="form-horizontal" action="" method="post"> {% csrf_token %} <h2 class="text-center">請登陸</h2> <div class="form-group"> <label for="inputEmail3" class="col-sm-3 control-label">用戶名</label> <div class="col-sm-9"> <input type="text" name="n1" class="form-control" id="inputEmail3" placeholder="用戶名"> <span class="help-block"></span> </div> </div> <div class="form-group"> <label for="inputPassword3" class="col-sm-3 control-label">密碼</label> <div class="col-sm-9"> <input type="password" class="form-control" name="p1" id="inputPassword3" placeholder="密碼"> <span class="help-block"></span> </div> </div> <div class="form-group"> <div class="col-sm-offset-3 col-sm-9"> <div class="checkbox"> <label> <input type="checkbox"> 記住我 </label> </div> </div> </div> <div class="form-group"> <div class="col-sm-offset-3 col-sm-9"> <button type="submit" id="b1" class="btn btn-block btn-primary" >登陸</button> <p style="text-align: center;color: red">{{ error_msg }}</p> </div> </div> </form> </div> </div> </div> <script src="/static/jQuery.js"></script> <script> $("#b1").click(function () { $("input:not([type='checkbox'])").each(function () { // 判斷值不爲空 if ($(this).val().length === 0){ // 展現錯誤提示 var errMsgPrefix = $(this).parent().prev().text(); $(this).next().text(errMsgPrefix + "不能爲空"); $(this).parent().parent().addClass("has-error"); } }); }); // 給輸入框綁定獲取焦點的事件 $("input:not([type='checkbox'])").focus(function () { // 清空錯誤提示 $(this).next().text(""); // 移除父標籤的has-error $(this).parent().parent().removeClass("has-error"); }); </script> </body> </html>
而後在網上搜到了jQuery 事件 - preventDefault() 方法css
定義和用法:preventDefault() 方法阻止元素髮生默認的行爲(例如,當點擊提交按鈕時阻止對錶單的提交)。html
實例:防止連接打開 URL:java
$("a").click(function(event){ event.preventDefault(); });
對照將原代碼中JQ語句改爲以下jquery
$("#b1").click(function (event) { $("input:not([type='checkbox'])").each(function () { // 判斷值不爲空 if ($(this).val().length === 0){ // 展現錯誤提示 var errMsgPrefix = $(this).parent().prev().text(); $(this).next().text(errMsgPrefix + "不能爲空"); $(this).parent().parent().addClass("has-error"); event.preventDefault(); } }); });
再此執行,當不輸入內容時,頁面不跳轉並顯示輔助文本,當校驗經過時正常跳轉bootstrap
另附:w3school 關於此方法的解釋ide