如果焦点不在提交按钮上,则表单不应在输入时提交

时间:2014-05-06 17:27:18

标签: javascript jquery preventdefault

我有一个要求,即如果他按下回车键,用户就无法提交表格,除非将焦点放在提交按钮上。

使用以下代码,我能够做到这一点,但现在的问题是,如果我有任何特定于任何字段的输入键事件(例如,如果我想将一个特定要求的输入键事件附加到一个文本字段) ,由于我在下面写的脚本,它不允许我。

<script>
$(document).keydown(function(event) {
if (event.keyCode == 13) {
    var $focusedItem = $(document.activeElement);
    if($focusedItem.is("button") || $focusedItem.is("a") || $focusedItem.attr("type") == "submit") {
        $focusedItem.click();
    } 
    else {
            event.preventDefault();
         }
    }
});
</script>

我可以限制用户在按下回车键时提交表单的任何解决方案,如果焦点不在提交按钮上,但同时如果任何表单字段附加任何回车键事件,那也应该有效

4 个答案:

答案 0 :(得分:0)

如果您创建了一个JsFiddle,它将更容易提供帮助。但是,我认为你应该这样做:

if($focusedItem.attr('id') == 'submitButton') {
    if (event.keyCode == 13) {
        submit the form
    }
}else if ($focusedItem.attr('id') == 'Anothertextarea') {
    if (event.keyCode == 13) {
        do something special
    }
}else{
    if (event.keyCode == 13) {
    return null;
    }
}

答案 1 :(得分:0)

试一试,看看它是否符合您的需求:

--DEMO--

$(document).on('submit', 'form', function (e) {
    e.preventDefault();
}).on('click', ':submit', function (e) {
    if (!$(document.activeElement).is(':submit')) return;
    var form = $(this).closest('form').length ? $(this).closest('form')[0] : $('#' + $(this).attr('form'))[0];
    form.submit();
});

答案 2 :(得分:0)

删除行event.stopPropagation();从你的脚本中,你只需要preventDefault()(阻止提交)。

当你执行stopPropagation()时,你将停止元素上的所有其他按键事件。

答案 3 :(得分:0)

也许我错过了这一点,这基本上是一个标准的HTML问题。

不要给表单提交操作(直接将其移动到按钮上的点击事件)并将所有按钮类型更改为按钮而不是提交。

我不记得是否只是从表单中删除提交就足够了。如果没有那么只需执行onSubmit =&#34; return false;&#34;我认为就是这样。

然而,作为一个说明,对全球行为的要求可能是错误的,如果它对政府来说那么你可能会遇到麻烦,因为它不符合可访问性指南。