Javascript 当焦点不在输入中时允许在输入时提交表单

Javascript 当焦点不在输入中时允许在输入时提交表单,javascript,html,Javascript,Html,我有一个表单,其中使用tabindex=“0”有一个可聚焦的div。一切正常,除了可以在enter键上提交表单。当输入聚焦时,它确实工作,但当div聚焦时,它不工作 我知道我可以使用一些javascript来捕获enter键并提交最接近的表单,但是还有其他方法来克服这个问题吗 这里有一个小提琴来演示这个问题 好吧,您可以实际检查Enter键,而不是提交“最近的表单”,以查找该表单中的任何元素。我意识到这有点类似于您没有寻找的解决方案,但我不确定您是否意识到可以将按键事件与表单绑定在一起 请查看:

我有一个表单,其中使用
tabindex=“0”
有一个可聚焦的
div
。一切正常,除了可以在
enter
键上提交
表单。当
输入
聚焦时,它确实工作,但当
div
聚焦时,它不工作

我知道我可以使用一些javascript来捕获
enter
键并提交最接近的
表单
,但是还有其他方法来克服这个问题吗


这里有一个小提琴来演示这个问题

好吧,您可以实际检查Enter键,而不是提交“最近的表单”,以查找该表单中的任何元素。我意识到这有点类似于您没有寻找的解决方案,但我不确定您是否意识到可以将按键事件与表单绑定在一起

请查看:

此事件仅在焦点位于窗体上时按下某个键时触发,因为
keypress
事件仅绑定到选择器
$(“窗体”)
e.which==13
只是检查enter,特别是

当然,您可以将
$(“表单”)
修改为任何选择器(例如,表单的 身份证、等级等)

EDIT:正如您所指出的,只需在表单上按enter键,就会导致需要使用它的元素出现问题,如
textarea
。我已经使用事件委托在表单的所有子级上触发事件,除了
textarea


让我知道它是如何工作的。

好吧,您可以不提交“最近的表单”,而是检查该表单中的任何元素的Enter键。我意识到这有点类似于您没有寻找的解决方案,但我不确定您是否意识到可以将按键事件与表单绑定在一起

请查看:

此事件仅在焦点位于窗体上时按下某个键时触发,因为
keypress
事件仅绑定到选择器
$(“窗体”)
e.which==13
只是检查enter,特别是

当然,您可以将
$(“表单”)
修改为任何选择器(例如,表单的 身份证、等级等)

EDIT:正如您所指出的,只需在表单上按enter键,就会导致需要使用它的元素出现问题,如
textarea
。我已经使用事件委托在表单的所有子级上触发事件,除了
textarea


让我知道这是如何工作的。

只需给表单起一个名字(例如
id=“test
”),然后使用以下代码仅提交具有给定id的表单:

$(function(){
 $("#test").keypress(function (e) {
    if (e.keyCode == 13) {
        alert('submitted');
        return false
    }
 });
});

只需为表单指定一个名称(例如
id=“test
”),然后使用以下代码仅提交具有给定id的表单:

$(function(){
 $("#test").keypress(function (e) {
    if (e.keyCode == 13) {
        alert('submitted');
        return false
    }
 });
});

严格来说,它不是有效的HTML,但它可以工作。。。您可以将
div
放入
中,并删除按钮的默认样式。与给出的另一个答案一样,
div
必须位于
表单
中,以便在不添加脚本的情况下完成此工作。您也不再需要div上的tabindex

<form>
<input/>
<button type="submit">
<div>
</div>
</button>
</form>

严格来说,它不是有效的HTML,但它可以工作。。。您可以将
div
放入
中,并删除按钮的默认样式。与给出的另一个答案一样,
div
必须位于
表单
中,以便在不添加脚本的情况下完成此工作。您也不再需要div上的tabindex

<form>
<input/>
<button type="submit">
<div>
</div>
</button>
</form>

请注意,
e.keyCode
不能在所有浏览器中工作。在vanilla JS中,
e.which
也不会,但是jQuery实际上标准化了
e.which
,因此它可以在所有浏览器中工作。请注意,
e.keyCode
不会在所有浏览器中工作。在vanilla JS中,
e.which
也不会,但是jQuery实际上标准化了
e.which
,因此它可以在所有浏览器中工作。谢谢你的想法,我知道直接绑定。另外,它不会干扰
textarea
的回车键吗?非常正确,我没有意识到
textarea
会牵涉其中,但我应该指出这一点。这个怎么样?谢谢你的想法,我知道直接绑定。另外,它不会干扰
textarea
的回车键吗?非常正确,我没有意识到
textarea
会牵涉其中,但我应该指出这一点。这个怎么样?谢谢你,好主意,虽然我不会应用它,但我想:)我宁愿使用javascript方法。不过,这是我想要的,所以我会接受你的回答。谢谢你,好主意,尽管我不会应用它,但我认为:)我宁愿使用javascript方法。然而,这是我所要求的,所以我会接受你的回答。