关于这个话题,我已经看了几个不同的问题而没有突破。我要做的是当用户点击submit
按钮时我在屏幕上显示3个按钮,如果用户点击表单提交的第三个按钮。否则我会阻止表单提交。
但是我在实现这个方面遇到了麻烦。目前我正在这样做,从我的研究中我看到,一旦提交表单,我就会在调用e.preventDefault()
时犯下非常明显的错误,这会阻止它被提交。
希望在我的代码中你会看到我正在尝试做的事情。在提交表单之前显示三个选项,如果选择了第三个选项,则仅提交。
HTML:
<form action="some_url" method="post">
<input type="text" value="" id="fname" />
<input type="submit" value="Submit" />
</form>
<br/>
<div id="option-box">
<span id="option-a">Option A</span>
<span id="option-b">Option B</span>
<span id="option-c">Option C</span>
</div>
JQuery的:
$('form').submit(function (e) {
e.preventDefault();
$('#option-box').show();
$('#option-a').click(function () {
alert('option a');
//Do something else
});
$('#option-b').click(function () {
alert('option b');
//Do something else
});
$('#option-c').click(function () {
alert('option c - SUBMIT');
$('form').submit();
});
});
#option-box {
display: none;
}
#option-box span {
background:green;
color: white;
display: block;
cursor: pointer;
padding:5px;
margin: 10px 0;
text-align:center;
max-width: 100px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<form action="some_url" method="post">
<input type="text" value="" id="fname" />
<input type="submit" value="Submit" />
</form>
<br/>
<div id="option-box">
<span id="option-a">Option A</span>
<span id="option-b">Option B</span>
<span id="option-c">Option C</span>
</div>
这是我当前代码的小提琴:
答案 0 :(得分:2)
您需要阻止提交表单才能开始
$('form').submit(function (e) {
e.preventDefault(); //<-- Need this
//... other code
});
在其他操作中添加事件处理程序也可能导致问题。提交多次,您将有更多的事件处理程序。所以你需要删除以前的事件。您可以使用off
$('#option-a').off("click").on("click", function () { /* other code */ });
最后,您不需要取消按钮的默认操作,因为他们不应该做任何事情。
如果您想提交表单,您可能想要取消绑定提交方法或直接从DOM调用它。
$('form').off("submit").submit();
或
$('form')[0].submit();
答案 1 :(得分:1)
记下上次选择的内容,并根据该选择preventDefault
:
var selectedOption = "";
$('form').submit(function (e) {
$('#option-box').show();
if (selectedOption != "option-c") {
e.preventDefault();
}
});
$('#option-box').on('click', 'span', function () {
selectedOption = $(this).attr("id");
});
答案 2 :(得分:1)
我可以通过几种方式考虑解决方案。
除非您在单击事件监听器<button type="submit">
<button type="button">
设为$('form').submit()
而不提交表单。
此处您的提交按钮最初已停用。您可以使用选项或脚本中的onClick
事件调用该函数,并删除按钮的disabled属性
与第二个选项类似,此处您将在用户使用脚本选择特定选项时设置操作URL。如果用户选择任何其他选项并单击提交,则不会执行任何操作