jQuery验证插件 - 焦点事件与键/鼠事件不一致

时间:2012-02-21 16:56:03

标签: javascript jquery javascript-events

我正在使用查询验证插件(http://docs.jquery.com/Plugins/Validation),我的目标是在提交表单之前显示错误消息。为此,我使用.valid()方法。

我不想在出现错误之前显示这些消息,所以我先隐藏它们。当第一次聚焦该字段时,我不想显示错误消息。使用鼠标聚焦输入时效果很好,但是当您使用Tab键聚焦字段时,无论如何都会显示错误消息。

我在这里创建了一个小提琴来演示焦点​​问题:http://jsfiddle.net/tucsonlabs/WQnHN/4/

3 个答案:

答案 0 :(得分:2)

这应该有效:http://jsfiddle.net/yQRvZ/

var code;
$('input').keyup(function(e) {
    code = (e.keyCode ? e.keyCode : e.which);
    if(code == 9) {
        return false;
    }
});

每当你释放一个密钥(这是.keyup())并且input字段聚焦时,这个jQuery代码会检查已发布密钥的密钥代码。 对于Tab,密钥代码为9,因此每次释放Tab时,return false;都会阻止默认事件并阻止事件冒泡。

答案 1 :(得分:1)

这更好用:

$(document).ready(function() {
    $('#myForm').validate();

    //$('#myForm').valid();
    $('#myForm').hideErrors();

    $('input').blur(function() {
        if( !$(this).valid() ) $(this).next('label.error').show();                
    });
});​

答案 2 :(得分:1)

我需要使用@mindandmedia和@Fabian的代码组合。

这对我有用:

var code; 

$('input').keyup(function(e) {
    code = (e.keyCode ? e.keyCode : e.which);
    if(code == 9) {
        return false;
    }
});

$('#myForm').validate();

$('input').blur(function() {
    if( !$(this).valid() ) { 
         $(this).next('label.error').show();                
    }
});