使用jquery插件在html元素上设置默认按钮

时间:2010-10-27 23:22:13

标签: javascript jquery plugins input

我正在编写一个jquery插件,它接受一些输入元素,例如输入元素,textareas,select html元素等,一旦在上述任何项目中按下回车键,就会触发输入按钮。因此,该按钮被设置为字段的默认值。有关这方面的任何提示吗?

1 个答案:

答案 0 :(得分:6)

表单中的第一个input type="submit" / "image" / button type="submit"是“默认”提交按钮。

如果要作为默认设置的按钮不应首先显示在页面上,请使用例如移动它。漂浮或定位。或者,如果这不可行,只需在表单中添加一个额外的虚拟提交按钮,使用position: absolute; left: -lots使其有效不可见。 (您可以使用tabindex来阻止它以正常的标签顺序出现;请勿使用display: nonevisibility: hidden,因为在某些浏览器中会停止将该按钮视为默认设置。 )从form.onsubmit事件和他们自己的onclick事件中的任何其他非默认按钮捕获默认按钮/提交操作。

这是一个丑陋的黑客,而且HTML无法自然地改变默认按钮,这当然很可惜,但是你在这里利用本机浏览器行为比尝试用脚本替换它更好,这是比你想象的更棘手。有很多有趣的小浏览器行为可以让你失望。

例如,如果您决定捕获Enter按键,则可能会从使用IME的用户那里获得不需要的Enter事件。在input type="button"textarea上输入按键通常不应触发提交。可能应该在select输入按键,除非使用键盘导航下拉菜单(并且您无法可靠地判断何时发生了这种情况)。如果表单中的非字段元素被聚焦并且按下了Enter,该怎么办?您将无法捕获它,并且在某些浏览器中,这将导致表单提交,而无需代码的干预,无论如何都会以默认按钮结束。 Shift-Enter或Ctrl-Enter是否表示在文本字段中提交?在文本区域?是否在复选框上输入检查,提交表单或两者? ...

浏览器在这里有许多微妙的不同行为;你会疯狂地试图掩盖每一个最后的可能性,无论你决定什么,都可能违背用户的预期行为。让浏览器的普通默认表单提交代码代替它。