我想用ajaxSumbit實現提交表單但不跳轉頁面的功能,但怎麼調整頁面還是會跳轉,beforeSumbit、success也都沒有正常顯示,請各位提供指導,謝謝。
demo1.php
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.0/jquery.min.js"></script>
<script src="http://malsup.github.com/jquery.form.js"></script>
<script lanaguage='javascript'>
$(document).ready(function() {
var options = {
target: '#output1', // 用伺服器返回的資料 更新 id為output1的內容.
beforeSubmit: showRequest, // 提交前
success: showResponse, // 提交後
//Other:
//url: url // 預設是form的action,如果寫的話,會覆蓋from的action.
//type: type // 預設是form的method,如果寫的話,會覆蓋from的method.('get' or 'post').
//dataType: null // 'xml', 'script', or 'json' (接受服務端返回的型別.)
//clearForm: true // 成功提交後,清除所有的表單元素的值.
resetForm: true // 成功提交後,重置所有的表單元素的值.
//由於某種原因,提交陷入無限等待之中,timeout引數就是用來限制請求的時間,
//當請求大於3秒後,跳出請求.
//timeout: 3000
};
$('#myForm').submit(function() {
$(this).ajaxSubmit(options);
return false; //來阻止瀏覽器提交.
});
});
// 提交前
function showRequest() {
alert("beforeSubmit");
}
// 提交後
function showResponse() {
alert("success");
}
</script>
</head>
<body>
<form id="myForm" action="ajax.php" method="post">
名稱: <input type="text" name="name" /> <br />
地址: <input type="text" name="address" /><br />
自我介紹: <textarea name="comment"></textarea> <br />
<input type="submit" id="test" value="提交" /> <br />
<div id="output1"></div>
</form>
</body>
</html>
ajax.php
<?php
if(isset($_POST["name"])){
$vName = $_POST["name"];
}
echo $vName;
if(isset($_POST["address"])){
$vAddress = $_POST["address"];
}
echo $vAddress;
if(isset($_POST["comment"])){
$vComment = $_POST["comment"];
}
echo $vComment;
?>
用 preventDefault 阻止預設行為
原生 javascript
document.querySelector('#myForm').addEventListener('submit', (e)=>{
e.preventDefault();
console.log('submit');
});
jquery
$('#myForm').submit((e)=>{
e.preventDefault();
console.log('submit');
})
Submit沒回應,使用方式有錯?
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.0/jquery.min.js"></script>
<script src="http://malsup.github.com/jquery.form.js"></script>
<script lanaguage='javascript'>
$(document).ready(function() {
var options = {
target: '#output1', // 用伺服器返回的資料 更新 id為output1的內容.
beforeSubmit: showRequest, // 提交前
success: showResponse, // 提交後
//Other:
//url: url // 預設是form的action,如果寫的話,會覆蓋from的action.
//type: type // 預設是form的method,如果寫的話,會覆蓋from的method.('get' or 'post').
//dataType: null // 'xml', 'script', or 'json' (接受服務端返回的型別.)
//clearForm: true // 成功提交後,清除所有的表單元素的值.
resetForm: true // 成功提交後,重置所有的表單元素的值.
//由於某種原因,提交陷入無限等待之中,timeout引數就是用來限制請求的時間,
//當請求大於3秒後,跳出請求.
//timeout: 3000
};
// $('#myForm').submit(function() {
// $(this).ajaxSubmit(options);
// return false; //來阻止瀏覽器提交.
// });
$('#myForm').submit((e)=>{
e.preventDefault();
console.log('submit');
$(this).ajaxSubmit(options);
return false; //來阻止瀏覽器提交.
})
});
// 提交前
function showRequest() {
alert("beforeSubmit");
}
// 提交後
function showResponse() {
alert("success");
}
</script>
</head>
<body>
<form id="myForm" action="b.php" method="post">
名稱: <input type="text" name="name" /> <br />
地址: <input type="text" name="address" /><br />
自我介紹: <textarea name="comment"></textarea> <br />
<input type="submit" id="test" value="提交" /> <br />
<div id="output1"></div>
</form>
</body>
</html>
這個JS檔案我這邊讀取不到:<script src="http://malsup.github.com/jquery.form.js"></script>
由於上述理由,我不知道 $(this).ajSubmit(options);
會不會有問題
提交表單後,你的 console 有顯示 submit 字串嗎?
如果有的話,問題不在 submit 的事件處理
而是 ajSubmit 這個 method 可能有問題
(因為讀不到檔案,沒法幫你看)
我猜你想用的是這個
https://github.com/jquery-form/form
console沒顯示任何文字,看F12的網路也沒有任何一筆http request
https://github.com/jquery-form/form 有提到ajaxSubmit(option),但請問它的用法? 如果是替代找不到的js,那我該用哪個路徑下的js?
用 chrome、firefox、edge 測試你的程式碼
只是把
<script src="http://malsup.github.com/jquery.form.js"></script>
修正為
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.form/4.3.0/jquery.form.min.js" integrity="sha384-qlmct0AOBiA2VPZkMY3+2WqkHtIQ9lSdAsAn5RUJD/3vA5MKDgSGcdmIv4ycVxyn" crossorigin="anonymous"></script>
都有出現 submit 並不會跳頁。
先前給的連結 https://github.com/jquery-form/form
裡面的 CDN 就是可以引用的連結了
JS換過去後,功能正常,不會發生跳轉,非常感謝
請教一下,您是怎麼根據我的需求找到對應的JS/jQuery-form ?
就算知道JS路徑失效,我要怎麼知道哪一個JS可以用?
我只是搜尋「jQuery-form」,判斷這是 jQuery 的 plugin
所以再搜尋「jquery form plugin」就看到了
至於判斷能用是因為我點進去
他提供的格式跟你貼的程式碼滿符合的
如果是不同的專案提供的介面不會那麼類似
其實這種簡單的需求應該比較少人會特別找 plugin 來用
jQuery 本身就有提供 ajax 的功能
用 ajax 拿到資料後看要做什麼自己寫一下就好了
其實~~~~
將
<input type="submit" id="test" value="提交" />
改成
<input type="button" id="test" value="提交" />
就好。
再去綁定這個click事件。會比較快。
因為有些瀏覽器。用submit就是會先發送而導致轉頁(還來不及RETURN)。
所以一般最好還是交由button來幫你處理submit。會比較直接點。