jquery - 多次触发按钮时的jQuery单击事件?
问题描述
好久没用jQuery了,有点生疏了。一个简单按钮上的点击事件有问题。(我已经尝试过每一个似乎是类似问题的建议问题。那里的解决方案似乎无法解决这个问题。)这是一种更改表中输出年份的表格(通过 ajax 检索的数据,所以没有页面刷新)。用户将需要能够更改年份并多次提交表单。
<form id="toolbar-year-form">
<input type="text" name="target-year">
<button>Go</button>
</form>
$(document).ready(function() {
$('#toolbar-year-form > button').off().on('click', function() {
$('#toolbar-year-form').submit(function(e) {
e.preventDefault();
e.stopPropagation();
alert("submitted");
});
});
});
如果我填写输入并单击按钮,它会按预期工作。如果我在没有刷新页面的情况下再次单击它,则该事件将触发两次。如果我再次单击,它会触发 3 次。等等...
每次单击时都会再次绑定单击事件,这解释了触发的乘法,但我不知道为什么它会再次被绑定。:-)
我错过了什么?
解决方案
如果一个按钮没有被赋予一个type
属性,它默认为一个submit
按钮。当单击按钮时,您正在为表单提交绑定一个(另一个)处理程序,然后单击按钮立即触发该处理程序,因为它submit
是表单的子按钮。您可以通过删除外部事件绑定来获得我认为您想要的行为,因为单击按钮已经提交了表单:
$(document).ready(function() {
$('#toolbar-year-form').submit(function(e) {
e.preventDefault();
e.stopPropagation();
alert("submitted");
});
});
推荐阅读
- file - 将文件拖放到快捷方式中以调用带有路径作为参数的 CMD.EXE
- javascript - 在双向链接列表中删除对已删除节点的引用
- python - 在多索引熊猫数据框中添加列
- javascript - 在列表中显示表单输入数据
- java - 删除数组的第一个元素而不在java中使用
- typescript - 为什么`semantic error TS2344: Type '"ptn3"' 不满足约束 '"ptn1" | “ptn2”'。`
- tensorflow - Tensorflow 模型控制台错误:“错误:传递给 'slice2d' 的参数 'x' 必须是数字张量,但得到了字符串张量”
- amazon-web-services - AWS 实例时钟是否以分钟精度同步?
- android - 如何正确实现以下缩放/反弹动画?
- google-cloud-dataflow - 使用 SLF4J 和 Google Dataflow 记录行号