jQuery一个函数没有按预期工作
jQuery one function not working as expected
我有以下jsp:
...
<script type="text/javascript">
$(function() {
// prevent multiple submissions
$('#saveCallListBtn').one("click", function() {
$('#callListForm').submit();
});
});
...
</script>
...
<form:form id="callListForm" commandName="callList" action="${contextPath}/calllist/save" method="POST" htmlEscape="true">
...
<td colspan="2" style="text-align: center">
<input id="saveCallListBtn" type="submit" value="Save" class="button-med"/>
</td>
...
</form:form>
我想要的行为是,无论单击保存按钮多少次,都只提交一次所有表单。使用jQuery.one函数,我可以使上面的代码正确工作。因为如果我点击不止一次,表单将提交多次。
以下代码将正常工作:
$('#saveCallListBtn').on("click", function() {
$(this).prop("disabled", true);
$('#callListForm').submit();
});
但我很想知道我在.one函数上做错了什么。
注意此处的type
:
<input id="saveCallListBtn" type="submit" value="Save" class="button-med"/>
form
中的submit
按钮将提交表单,不需要JavaScript。因此,当您的处理程序被自动删除时,在下一次单击时,浏览器会提供默认处理(提交表单)。
我怀疑,你在第一次点击时没有看到两次提交的表格的唯一原因是,提交表格的行为开始了撕下页面的过程,为提交的结果腾出空间。
FWIW,我建议您不要在按钮上设置click
处理程序,而是在表单上设置submit
处理程序,如果一切顺利,将允许提交,则禁用按钮并设置一个标志以防止将来提交表单,因为表单可以通过多种方式提交。(例如,在某些表单中,按文本字段中的Enter键即可完成此操作。)
例如:
$("#callListForm").on("submit", function(e) {
var $btn = $("#saveCallListBtn");
var valid = !$btn.prop("disabled");
if (valid) {
// ...do any other validity checks you may want, set `valid` to false
// if problems encountered...
}
if (valid) {
$btn.prop("disabled", true);
} else {
e.preventDefault();
}
});
jQuery one
函数将只执行事件处理程序一次。但是,单击的元素的默认行为将无限期执行。
将按钮类型更改为button
,使其没有默认行为:
<input id="saveCallListBtn" type="button" value="Save" class="button-med"/>
相关文章:
- 咖啡的Javascript订单总数无法使函数正常工作.请协助
- removeClass函数没有'工作不正常
- 你能解释一下这个阶乘函数是如何工作的吗?
- JavaScript链接在点击时不起作用;函数在页面加载时工作
- jQuery加载的async和ready函数不工作
- 更改智能表中的页面将停止JQuery函数的工作
- 为什么不是'我的函数在解析云代码中工作吗?当我在Angular和Express中测试时,它是有效的
- jQuery函数不能只在一个页面上工作
- 如何检查这个代码点火器php函数是否工作,该函数是否在ajax url中使用
- 从js引擎的角度来看闭包和构造函数是如何工作的
- appendChild在函数外部工作,但在函数内部不工作
- 如何在php中创建一个函数,该函数与文本区域一起工作,通过输入类似[color:red]的内容来打印具有等效颜色的文本
- 由于某种原因,我的JavaScript函数无法工作
- 为什么递归生成器函数没有't在ES2015工作
- 我需要一个jQuery函数来只工作在700px以上的屏幕大小,无法在我的代码中发现错误
- 从控制台中的工作函数转换为工作脚本.(请参阅编辑)
- Angular JS-工作函数中的“错误:[$interpole:interr]Can't interpole:
- 简化工作函数以替换特定单词
- 为什么不在回调中工作函数?
- InnerHTML不工作:函数未定义