javascript - 使用 jQuery 基于选择动态更改表单操作 - 默认提交问题
问题描述
我有带有电子邮件选项字段的简单表格。我想使用 jQuery 进行基于选择的动态更改表单操作,它工作正常。
唯一的问题是,如果您不单击“Motoristi”/“Navtika”选项之一进行选择,则不会发生任何事情。我希望默认操作起作用。
<html>
<script>
$(document).ready(function () {
// Function to change form action.
$("#db").change(function () {
var selected = $(this).children(":selected").text();
switch (selected) {
case "Motoristi":
$("#myform").attr('action', 'https://kmc.us20.list-manage.com/subscribe/post?u=90bdfa6b0ea17ba9839f78143&id=75956a3bb4');
break;
case "Navtika":
$("#myform").attr('action', 'https://kmc.us20.list-manage.com/subscribe/post?u=90bdfa6b0ea17ba9839f78143&id=2463b3ce5c');
break;
default:
$("#myform").attr('action', 'https://kmc.us20.list-manage.com/subscribe/post?u=90bdfa6b0ea17ba9839f78143&id=75956a3bb4');
}
});
// Function For Back Button
$(".back").click(function () {
parent.history.back();
return false;
});
});
</script>
<div id="main">
<div id="first">
<form id="myform" method="post" name="myform">
<label>E-poštni naslov:</label>
<input type="email" value="" name="EMAIL" class="required email" id="mce-EMAIL" required>
<label>Zanimanje:</label>
<select id="db">
<option>Motoristi</option>
<option>Navtika</option>
</select>
<input class="submit" id="submit" type="submit" value="Submit">
</form>
</div>
</div>
</html>
解决方案
一些更正
- 设置
<form>
[action]
为默认值,因为用户可以跳过<select>
,否则将没有默认值。 <option>
在第一个位置添加默认值。- 添加
value
到每个<option>
- 直接使用
<select>
获取选定的值。var selected = $('#db').val()
- 使用
confirm()
代替alert()
- 当用户单击
OK
设置<form>
[action]
为新值和return
. - 当用户单击
Cancel
设置<select>
为默认值时:$('#db').val('')
- 当用户单击
- 使用模板文字而不是字符串文字。
- TL:用
`
ex 包装。`文本字符串` - TL:可以有多行
- TL:用
建议
尽可能使用语义元素。
<main>
,<section>
, 和<fieldset>
被添加来定义层次结构和目的。更技术性的原因是可以更流畅地分配样式。
我将 id 更改
<form>
为#main
from#myForm
。这样做没有任何好处,只是我讨厌任何命名my*
的东西,这只是我的看法。
演示
$(document).ready(function() {
// Function to change form action.
$("#db").change(function() {
var selected = $(this).val();
switch (selected) {
case "Motoristi":
if (window.confirm(`
Form Action is Changed to 'mysql.html'
Press OK to Confirm.
`)) {
$("#main").attr('action', 'https://kmc.us20.list-manage.com/subscribe/post?u=90bdfa6b0ea17ba9839f78143&id=75956a3bb4');
return;
}
$(this).val('');
break;
case "Navtika":
if (window.confirm(`
Form Action is Changed to 'oracle.html'
Press OK to Confirm.
`)) {
$("#main").attr('action', 'https://kmc.us20.list-manage.com/subscribe/post?u=90bdfa6b0ea17ba9839f78143&id=2463b3ce5c');
return;
}
$(this).val('');
break;
default:
$("#main").attr('action', 'https://kmc.us20.list-manage.com/subscribe/post?u=90bdfa6b0ea17ba9839f78143&id=75956a3bb4');
break;
}
});
// Function For Back Button
$(".back").click(function() {
parent.history.back();
return false;
});
});
<!DOCTYPE html>
<html>
<head></head>
<body>
<main>
<section class="first">
<form id="main" action='https://kmc.us20.list-manage.com/subscribe/post?u=90bdfa6b0ea17ba9839f78143&id=75956a3bb4' name="main" method="post">
<fieldset>
<label>E-poštni naslov:</label>
<input type="email" value="" name="EMAIL" class="required email" id="mce-EMAIL" required><br>
<label>Zanimanje:</label>
<select id="db">
<option value=''>Odaberite zanimanje</option>
<option value='Motoristi'>Motoristi</option>
<option value='Navtika'>Navtika</option>
</select>
<input type="submit">
</fieldset>
</form>
</section>
</main>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
</body>
</html>
推荐阅读
- matlab - Matlab中MFCC系数的一阶导数
- oracle - 我无法在 oracle apex 19.2 中单击按钮时传递值
- javascript - 在Angular 8中使用相同的ngModel属性绑定多个文本框中的不同值
- javascript - 实现 Number.prototype.loop(callback)
- python - 如何使用 python 克隆 github 存储库?
- c# - Pet.Acropromazine():并非所有代码路径都返回值
- docker - 如何让 Docker 在 WSL 中查看挂载路径中的文件?
- react-native - 如何在 react-native 中使用画布创建图形并渲染线的动态坐标?
- angular - 角度编辑表格上的所有值
- javascript - Perform AJAX post request to the same PHP page (Jquery Form Plugin)