2017-03-21 175 views
0

我有一個表單,應該在提交按鈕後提交數據。根據需要標記幾個輸入字段後,如果在按下提交按鈕後在所需字段中沒有任何輸入,表單總是顯示給我 - 到目前爲止,這很好。成功提交表單後重定向

我想知道的是,如果提交成功,就會重定向到另一個頁面。如果有一些空的必填字段,表單應顯示給我,而不會將我重定向到其他頁面。

現在我有以下代碼:

提交按鈕:

<div class="form-group"> 
    <div class="col-sm-offset-2 col-sm-10"> 
    <button type="submit" name="submityes" id="submityes" class="btn btn-danger">Submit</button> 
     </div> 
    </div> 

而且我有以下js函數提交表單和我重定向到另一頁:

$('document').ready(function() { 
"use strict"; 
$(function() { 
    $('#submityes').click(function() { 
     $.ajax({ 
      type: "POST", 
      /*url: "process.php", //process to mail 
      data: $('form.contact').serialize(),*/ 
      success: function (msg) { 
       window.location.replace("/submit_resolved.php"); 
      }, 
      error: function() { 
       alert("error"); 
      } 
     }); 
    }); 
}); 

});

我現在的問題是,我將永遠被重定向到「submit_resolved.php」頁面,無論所有必填字段是否完整。

我該如何解決這個問題?我只想在所有必填字段不爲空時重定向。

+1

您當前的代碼不提交* *的形式,它使沒有首先做任何驗證一個Ajax請求。你爲什麼不做一個標準的(非Ajax)表單提交,然後在你的PHP中處理重定向? – nnnnnn

+0

您可以更改您的事件偵聽器來偵聽表單的submit,然後在您的HTML元素上使用'required'屬性....如果您將eventlistener更改爲event_prevent();您將需要添加'event.preventDefault聽表單提交以防止表單執行默認操作'post',因此可能用表單標籤包裝表單... – NewToJS

+0

謝謝。我如何在沒有Ajax的情況下執行代碼?和ajax做不同的是什麼? –

回答

1

你應該綁定到submit事件,不click事件:

更新以匹配評論

$(function() { 

    var submityesClicked; 

    //catch the click to buttons 
    $('#submityes').click(function() { 
     submityesClicked = true; 
    }); 
    $('#submitno').click(function() { 
     submityesClicked = false; 
    }); 

    $('#webform').submit(function (e) { 
     e.preventDefault();//prevent the default action 

     $.ajax({ 
      type: "POST", 
      /*url: "process.php", //process to mail 
      data: $('form.contact').serialize(),*/ 
      success: function (msg) { 
       window.location.replace(submityesClicked ? "/submit_resolved_yes.php" : "/submit_resolved_no.php"); 
      }, 
      error: function() { 
       alert("error"); 
      } 
     }); 
    }); 
}); 

只有當該submit事件被觸發表格有效。

請注意,submit事件由表單觸發,但click事件由input元素觸發。

+0

謝謝。所以要綁定提交事件,我需要將選擇器從'#submityes'更改爲其他內容?不幸的是,我不確定在那裏寫什麼表達。 –

+0

哦,我想我明白了。我給了表單名稱/ id「webform」,並且我在方括號中寫了'#webform'而不是'#submityes'。現在我還有一個小問題:表單有兩個不同的提交按鈕('#submityes'和'#submitno')。兩者都應該將用戶重定向到不同的頁面。我如何在代碼中實現這一點?它應該是類似於「如果#webform'通過'#submityes'重定向到X,如果通過'#submitno'重定向到Y' –

+0

@TimKühn提交,請參閱我的更新回答? –

1

做重定向完成。不成功

$('document').ready(function() { 
"use strict"; 
$(function() { 
    $('#submityes').click(function() { 
     $.ajax({ 
      type: "POST", 
      /*url: "process.php", //process to mail 
      data: $('form.contact').serialize(),*/ 
      success: function (msg) { 
       //window.location.replace("/submit_resolved.php"); 
      }, 
      complete: function() { 
       window.location.replace("/submit_resolved.php"); 
      } 
      error: function() { 
       alert("error"); 
      } 
     }); 
    }); 
}); 
+0

如果表單未成功驗證,則OP不需要任何重定向(如在必填字段爲空的情況下不重定向)。 – nnnnnn

+0

也許我的誤解......但無論如何,首先我們必須驗證 - 在提交之前,然後通過ajax發送請求,並在收到響應時檢查是否所有進程都成功。然後,如果一切正常,完全我們必須重定向用戶。我對嗎? –

0

我假設你在process.php中驗證表單,所以如果驗證失敗,像process.php這樣你必須返回錯誤。

header('HTTP/1.1 500 Internal Server Booboo'); 
header('Content-Type: application/json; charset=UTF-8'); 
die(json_encode(array('message' => 'ERROR', 'code' => 1337))); 

檢查此鏈接:Return errors from PHP run via. AJAX?

希望這可以對您有所幫助。

0

你可以做最簡單的事情就是添加屬性「需要」給你輸入elements.Example:

<form action="/action_page.php"> 
    Username: <input type="text" name="usrname" required> 
    <input type="submit"> 
</form> 

這是一個HTML5特性,所以不需要的JavaScript。它受到所有主流瀏覽器的支持。檢查此鏈接:

http://caniuse.com/#search=required

無論如何,你不應該依賴只是前端驗證。檢查後端的輸入。

+0

但是如果表單從後端角度來看是無效的 –

+0

這是另外一個問題 –

0
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
<div class="form-group"> 
    <div class="col-sm-offset-2 col-sm-10"> 
     <form action=""> 
      Username: <input type="text" id="usrname" required> 
      <button type="button" name="submityes" 
      id="submityes" class="btn btn-danger">Submit</button> 
     </form> 
    </div> 

function isValid(){ 
    var usrname = $("#usrname").val(); 
    if(usrname == ""){ 
     return false; 
    } 
    return true; 
} 
$(function() { 
    $('#submityes').submit(function() { 
    if(isValid() == true){ 
     $.ajax({ 
      type: "POST", 
      /*url: "process.php", //process to mail 
      data: $('form.contact').serialize(),*/ 
      success: function (msg) { 
       alert("success"); 
       window.location.replace("/submit_resolved.php"); 
      }, 
     }); 
     }else{ 
     alert("error"); 
     } 
    }); 
}); 
+0

非常感謝。函數isValid()是後端驗證嗎?我想我需要檢查每個需要的變量是否爲這個函數? –

+0

你可以做它在前端以及後端 –

+0

你可以在for循環中使用form.elemets來驗證表單中的每個元素 –