在特定字段上输入按下时阻止jquery提交

时间:2012-03-05 12:49:55

标签: jquery

当我按下特定输入字段上的回车键时,如何从运行中取消jquery提交?

这样的事情:

var $canSubmit = true;
$('#profile_form')
    .keyup(function(e){         
        if (e.keyCode == 13 && e.srcElement.name == 'countrySearch') {
            $canSubmit = false;
        } else
            $canSubmit = true;
    })
    .on('submit', function(e){
        e.preventDefault();
        console.log(e);

        if (!$canSubmit) return false;

        // first time enter is clicked when on countrySearch this is run as submit runs before keyup
        // i want all code here not to run when enter is clicked on input[name="countrySearch"]
    });

2 个答案:

答案 0 :(得分:2)

您应该使用按键而不是键盘和e.target.name

var $canSubmit = true;
$('#profile_form').keypress(function(e) {
    if (e.keyCode == 13 && e.target.name == 'countrySearch') {
        $canSubmit = false;
    } else {
        $canSubmit = true;
    }
}).on('submit', function(e) {
    if (!$canSubmit) {
        return false;
    } else {
        alert('this would submit');
    }

});

在这里摆弄http://jsfiddle.net/tazcu/1/

答案 1 :(得分:0)

由于您正在使用jQuery,我认为您应该使用e.which来获取密钥代码。我可能错了,但我认为这提供了比e.keyCode更多的跨浏览器解决方案。

无论如何,这是你要求的:

$('[name=countrySearch]')
    .keydown(function(e){         
        if (e.which == 13) {
            e.preventDefault();
        }
    });

我认为你实际上想要绑定到keydownkeypress事件而不是keyup,但我也可能错了:)无论如何,而不是做你的e.srcElement.name检查,您只需将事件绑定到countrySearch元素本身即可。然后,如果密钥代码最终为13,则只是阻止默认操作(在这种情况下,将提交表单)。无需设置一个凌乱的全局变量,在submit事件被触发时会被检查,因为submit事件根本不会被触发!