【发布时间】:2018-10-26 14:31:37
【问题描述】:
有 knockout-3.3.0 & jquery-1.11.2 & bootstrap-3 应用程序。
带有click绑定的模板:
<div class="modal-footer">
<button type="button" class="btn btn-primary" data-bind="click: $parent.Submit, text: 'Submit'"></button>
</div>
视图模型包含处理程序:
self.Submit = function (data, event) {
console.log('fired');
/* do some very important staff */
};
如果我点击了 提交 按钮,那么事件会触发一次。 但是,如果我按住 Enter 键 并单击 Submit 按钮并按住 Enter 键,则该事件会触发 10 到 20 次。
有一个选项可以像这样修改处理程序:
self.isSubmitting = ko.observable(false);
self.Submit = function (data, event) {
if (self.isSubmitting()) {
return;
}
console.log('fired');
self.isSubmitting(true);
/* do some very important staff */
self.isSubmitting(false);
};
但我更喜欢一些更通用的解决方案,而不是修改应用程序中的每个 click 处理程序。
那么,你怎么看?提前谢谢!
编辑: 问题出在按钮被点击后的焦点上。修改事件绑定不是选项,因为这种行为是正确的。这就是为什么解决方案是使用 isSubmitting 布尔变量修改处理程序以避免不必要的执行。
【问题讨论】:
-
keypress 触发多次,所以会发生这种情况。与双击按钮的人没有什么不同。所以当有人双击时你会遇到同样的问题......
-
我有“点击”处理程序,没有“按键”处理程序。在控制台中,单击处理程序有多个日志,并且每次事件的类型为“单击”。实际上,双击不会触发事件两次或更多次。
-
不确定您使用的是什么浏览器,两次点击不会触发两次点击事件。输入键会触发点击,空格键也会触发。
-
我有几个按钮的模式。 'enter' 和 'space bar' 都不会触发 'click' 事件。关于“双击”,您是对的。我没有得到它,因为我的模态关闭得太快了。我使用最新的 Chrome。
标签: javascript jquery twitter-bootstrap-3 click knockout-3.0