[英]IE focuses submit button when submitting form with enter key
我目前在我的一个应用程序中有一个表单,该表单使用隐藏按钮来解决Android上数字键盘的问题。 本质上,按Enter键或聚焦按钮将提交表单。
按下Enter键可在Chrome(桌面),Firefox(桌面)和Safari(iOS)中运行,并且仅提交一次表单。 在IE中,浏览器两次提交表单,因此我只能假定当用户按下Enter键时,它会集中提交按钮。
这是演示的示例。 在我测试过的Chrome和其他浏览器中,只需清除该框即可。 在IE中,它将警告“无效数量”。
HTML:
<form data-bind="submit: SubmitQuantity">
Quantity:
<input id="quantity" type="number" data-bind="value: Quantity, valueUpdate: 'afterkeydown'"/>
<button type="submit" data-bind="event: { focus: SubmitQuantity }" class="hidden_button"></button>
</form>
CSS:
.hidden_button {
width: 0px;
height: 0px;
font-size: 0px;
border: 0px;
left: -9999px;
padding: 0px 0px 0px 0px;
}
JS:
var viewModel;
function ViewModel() {
var self = this;
self.Quantity = ko.observable('');
self.SubmitQuantity = function() {
if (isNaN(self.Quantity())) {
alert('Invalid quantity');
return;
}
self.Quantity(undefined);
};
}
viewModel = new ViewModel();
ko.applyBindings(viewModel);
有没有一种方法可以防止IE进行这种由隐藏字段引起的双重提交?
确实没有必要两次调用SubmitQuantity
函数。 不能完全确定您的Android问题(也许可以详细说明吗?),但是我怀疑您正在使用隐藏的“提交”按钮来实际发布表单。 在form
元素上使用submit
数据绑定将阻止表单提交 。 从KO文档 :
当您在表单上使用
submit
绑定时,Knockout将阻止浏览器对该表单进行默认的提交操作。 换句话说,浏览器将调用您的处理程序函数,但不会将表单提交给服务器。 这是一个有用的默认值,因为使用submit
绑定时,通常是因为您使用表单作为视图模型的接口,而不是常规的HTML表单。 如果您确实希望让表单像普通的HTML表单一样提交,只需从您的submit
处理程序返回true
。
所以,你可以完全删除隐藏按钮,返回true
在你SubmitQuantity
功能,当你准备好表单提交-在这个例子中,这将是唯一的后Quantity
是多少。
self.SubmitQuantity = function() {
if (isNaN(self.Quantity())) {
alert('Invalid quantity');
return false;
}else{
return true; // form will be submitted
}
self.Quantity(undefined);
};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.