Javascript jQuery防止默认问题

Javascript jQuery防止默认问题,javascript,jquery,html,twitter-bootstrap,Javascript,Jquery,Html,Twitter Bootstrap,我有一个有趣的例子:我正在使用一个标记输入字段。当我单击enter将标记添加到标记字段时,表单将提交。因此,我将代码放在下面,以防止表单提交: $(document).ready(function() { $(window).keydown(function(event){ if(event.keyCode == 13) { event.preventDefault(); return false; }

我有一个有趣的例子:我正在使用一个标记输入字段。当我单击enter将标记添加到标记字段时,表单将提交。因此,我将代码放在下面,以防止表单提交:

$(document).ready(function() {
    $(window).keydown(function(event){
        if(event.keyCode == 13) {
            event.preventDefault();
            return false;
        }
    });
});
现在,当我在标记输入中按enter键时,不会在字段中创建新标记。默认的输入行为在标签插件中使用


有没有一种方法不需要更改插件?

您可以使用event.target检查keydown事件发生的位置

$(document).ready(function() {
    $(window).keydown(function(event){
        if(event.keyCode == 13 && !$(e.target).is("input[name=fieldName]")) {
            event.preventDefault();
            return false;
        }
    });
});

您可以使用event.target检查keydown事件发生的位置

$(document).ready(function() {
    $(window).keydown(function(event){
        if(event.keyCode == 13 && !$(e.target).is("input[name=fieldName]")) {
            event.preventDefault();
            return false;
        }
    });
});

问题是,在这里,在处理
表单
事件侦听器之前,它从未涉及到
窗口
事件侦听器的问题,例如:submit。 事件总是在dom中冒泡。因此,
窗体
总是出现在
窗口
之前。因此,防止默认是没有帮助的,因为当涉及到
窗口
事件时,
表单
已经发生了默认。 将向下键侦听器添加到
表单
本身,它应该可以工作


编辑:或者更好,因为更精确-只将按键侦听器添加到您想要默认的字段。

问题是,在处理
表单
事件侦听器之前,它从来没有涉及到
窗口
事件侦听器,例如:submit。 事件总是在dom中冒泡。因此,
窗体
总是出现在
窗口
之前。因此,防止默认是没有帮助的,因为当涉及到
窗口
事件时,
表单
已经发生了默认。 将向下键侦听器添加到
表单
本身,它应该可以工作


编辑:或者更好,因为更精确-只将键控侦听器添加到您想要默认的字段。

我找到了解决方案:

$(document).ready(function() {

    $('#form-content').on('submit',function(event, can_submit){
        if(!can_submit){
            event.preventDefault();
        }
    })
});

function formSubmit() {
    $('#form-content').trigger('submit', [true])
}
然后我使用一个链接作为保存按钮:

<a class="btn btn-primary btn-lg btnSubmit" onclick="formSubmit()" >{% trans "Save" %}</a>
{%trans“保存”%}

谢谢你的回答

我找到了解决方案:

$(document).ready(function() {

    $('#form-content').on('submit',function(event, can_submit){
        if(!can_submit){
            event.preventDefault();
        }
    })
});

function formSubmit() {
    $('#form-content').trigger('submit', [true])
}
然后我使用一个链接作为保存按钮:

<a class="btn btn-primary btn-lg btnSubmit" onclick="formSubmit()" >{% trans "Save" %}</a>
{%trans“保存”%}

谢谢你的回答

尝试删除
返回false因为它也会停止事件传播
preventDefault()
单独就足以停止表单提交银行进行评论。它不起作用。它可以防止表单提交和标签插件进入。按照McCrossan先生的建议,去掉
return false
,然后将
event.preventDefault()
放在
if(event.keyCode==13){…
的正上方
13
作为
confirmKeys
选项的值,例如
confirmKeys:[13,44]
请显示使用插件的代码。尝试删除
返回false;
,因为它也会停止事件传播。
preventDefault()
单独一项就足以阻止表单提交到银行进行评论。它不起作用。它阻止表单提交和标签插件进入,并按照McCrossan先生的建议清除
return false
,然后将
event.preventDefault()
放在
if(event.keyCode==13)的正上方{…
您是否有
13
作为
confirmKeys
选项的值,例如
confirmKeys:[13,44]
请显示使用插件的代码。