jQuery preventDefault问题

时间:2016-07-06 15:13:43

标签: javascript jquery html twitter-bootstrap

我有一个有趣的案例:我正在使用this plugin作为标记输入字段。当我单击“输入”将标签添加到标签字段时,表单会提交。所以我把下面的代码放在一边,以防止表单提交:

$(document).ready(function() {
    $(window).keydown(function(event){
        if(event.keyCode == 13) {
            event.preventDefault();
            return false;
        }
    });
});

现在,当我按下输入标签输入时,不会在字段中创建新标签。标签插件中使用默认输入行为。

有没有办法绕过它而不涉及更改插件?

3 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

问题是,在处理window事件侦听器之前,form事件侦听器永远不会到达,例如:submit。 事件总是冒出来的。因此form总是在window之前。因此,在form事件发生时,window已经发生了默认情况,因此无法帮助阻止默认。 将keydown侦听器添加到form本身,它应该可以工作。

编辑:甚至更好,因为更准确 - 只将keydown侦听器添加到您要阻止的字段默认。

答案 2 :(得分:0)

我找到了解决方案:

$(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>

感谢您的回答!