当我在不同的文本输入上按enter键时,如何使表单提交不同的按钮
How to make form submit different button when I press enter on different text input?
例如,我有这样的形式:
<form action="destination.jsp" method="POST">
<input type="text" name="Productqty1"/>
<input type="text" name="Productqty2"/>
<input type="text" name="Productqty3"/>
<input type="submit" name="RecalculatePrice" value="Recalculate Price"/>
<input type="text" name="ZipCode"/>
<input type="submit" name="RecalculateShipping" value="Recalculate Shipping"/>
<input type="text" name="Offercode"/>
<input type="submit" name="RecalculateDisc" value="Recalculate Discount"/>
<input type="submit" name="CheckOut"/>
</form>
我需要的是,如果用户在Productqty1、Productqty2或Productqty3上按enter键,则默认操作将被取消,而是单击"重新计算价格"按钮。
如果用户在ZipCode上按enter键,则会单击"重新计算装运"按钮。与Offercode输入和"重新计算Offercode"按钮相同。
但是,如果用户按下"签出"按钮,则必须仍然提交整个表单。这就是为什么他们在同一个表单上,在同一表单上有多个提交按钮
我还需要取消回车键的默认操作,因为IE8没有在表单提交的同时发送按钮提交值,所以让我们完全禁用它以避免混淆。
如何找到统一的解决方案?如果必须在多个javascript函数中制作也没关系,只要我能理解解决方案模式,因为表单中有多个提交按钮,用户可以在任何输入字段上按enter键,这让我很困惑。欢迎JQuery解决方案。谢谢
编辑:很抱歉用词不当,导致混乱。我对抑制默认操作的意思是,当你按下回车键时,表单就会被提交,使用任何(随机?)按钮提交。这是我想要抑制的默认行为。
我为每个提交按钮(添加了id)和文本框(添加了类)添加了类和id。
试试这个
<form action="destination.jsp" method="POST">
<input type="text" name="Productqty1" class="class1"/>
<input type="text" name="Productqty2" class="class1"/>
<input type="text" name="Productqty3" class="class1"/>
<input type="submit" name="RecalculatePrice" value="Recalculate Price" id="class1"/>
<input type="text" name="ZipCode" class="class2"/>
<input type="submit" name="RecalculateShipping" value="Recalculate Shipping" id="class2"/>
<br><br>
<input type="text" name="Offercode" class="class3"/>
<input type="submit" name="RecalculateDisc" value="Recalculate Discount" id="class3"/>
<input type="submit" name="CheckOut"/>
</form>
编写脚本
$(document).ready(function () {
$(".class1").keypress(function (event) {
if (event.which == 13) {
event.preventDefault();
$('#class1').click();
}
});
$(".class2").keypress(function (event) {
if (event.which == 13) {
event.preventDefault();
$('#class2').click();
}
});
$(".class3").keypress(function (event) {
if (event.which == 13) {
event.preventDefault();
$('#class3').click();
}
});
});
Fiddle演示
我认为CheckOut
是您的特殊场景。虽然你当然可以抓住回车键并调用不同的操作,但我认为这不是最佳解决方案的主要原因有两个:
- 你对IE8的担忧似乎否定了之前的整个讨论,在我看来,这应该建议你换一个方向看。不要为IE8做特殊的解决方案,做一些所有受支持的浏览器都能理解的事情
- 没有任何字段应将
CheckOut
作为输入时的默认操作
我建议您制作不同的表单,和使用不同的操作,而不是通过检查按钮的名称参数来检查单击了哪个按钮。
点击"签出"按钮时,您应该提交所有表单,这永远不应该由回车键触发。您可以序列化它们的组合值,并像这样发布:
$('#product-form, #zip-form, #offer-form').serialize();
您可以在提交页面之前使用jquery/javascript函数更改表单操作。提交类型应将表单提交到默认表单操作,该操作已添加到表单声明中。
<form action="destination.jsp" method="POST">
<input type="text" name="Productqty1"/>
<input type="text" name="Productqty2"/>
<input type="text" name="Productqty3"/>
<input type="button" name="RecalculatePrice" value="Recalculate Price"/ onClick="callDefault();">
<input type="text" name="ZipCode"/>
<input type="button" name="RecalculateShipping" value="Recalculate Shipping"/ onClick="callRecalculateShipping();">
<input type="text" name="Offercode"/>
<input type="button" name="RecalculateDisc" value="Recalculate Discount"/ onClick="callRecalculateDisc();">
<input type="button" name="CheckOut"/ onClick="callCheckout();">
</form>
<javascript>
function callCheckout(){
form.action="<some value>";
form.submit();
}
...so on with other functions...
</javascript>
将输入类型更改为按钮。
- 如何在创建键时引用来自同一对象的键
- 当按下一个键时,请多次按下不同的键
- 单击同一链接时,使Iron Router重新加载页面
- 当输入退格键时,ReadOnly TextBox会导致页面后退
- 当按下箭头键时,我的图像以一种奇怪的方式跳跃(HTML+JS)
- Javascript:当同时按下两个键时,留下其中一个也会影响另一个的听众
- 如果按下两个不同的键,如何使事件发生(HTML5 Javascript)
- 按enter键时,jQuery UI自动完成字段未提交
- 在ASP.NET中单击“提交”按钮时,使表单不刷新
- 自动完成:只有当用户键入制表键时,才关注第一个项目
- 在 Forerunner 数据库集合中创建主键时,key 属性是否可以位于集合对象的对象内部
- jQuery/Svg:按下键时的增量值“dur”
- 防止在按“回车”键时重新加载页面
- 为什么当我在正则表达式中放置空格键时,我的 Javascript test() 函数失败了
- 仅在按下 Tab 键时调用 onBlur 事件
- 当在文本框中按下Enter键时,重定向到page.aspx
- 如何在JavaScript中,每当一个按钮被另一个变量的值点击时,使变量减少
- 当对话框窗口打开时,使父页模糊
- 当页面加载时,使谷歌chrome浏览器成为全屏浏览器
- 当我在不同的文本输入上按enter键时,如何使表单提交不同的按钮