在jQuery中使用.change()进行验证

时间:2011-05-18 14:18:29

标签: javascript jquery

所以我使用jQuery的.change()函数来触发该特定表中其他字段的验证。请参阅下面的代码....我遇到的问题是:如果我在输入字段中键入内容,然后将其删除,它仍然认为它已更改,并且需要其他字段。我可以看到这对用户来说是一个问题,无论如何都有这个吗?

P.S。 class =“R”来自我的自定义验证,并使其成为必填字段。

$('#t1 :input').change(function(){                                          

        var $t1Input = $('#t1Table :input:not(input[type=hidden])');
        var hasData = false;


   $t1Input.each(function(){
            if($(this).val().length > 0){
                hasDatat1 = true;
                return false;
            }
        });
        // Change class of input field to "R" if something has been changed 
            if(hasDatat1)
                $t1Input.addClass('R');                                                                  
            else
                $t1Input.removeClass('R');
        });

4 个答案:

答案 0 :(得分:1)

您可以使用此处概述的方法来检测“真实”更改:Getting value of select (dropdown) before change

答案 1 :(得分:1)

试试这个:

$('#t1 :input').change(function(){
    if ($(this).val() == '') return;

答案 2 :(得分:1)

您可以使用JQuery的.data()函数存储值并检查代码中的实际更改

答案 3 :(得分:0)

如果我正确地阅读了您的问题,这将验证每个输入,而不会在每次更改时验证t1Table中的所有输入。

$('#t1 :input:not(input[type=hidden])').change( function() {
    if( $(this).val() == '' )  { $(this).addClass('R'); }
    else { $(this).removeClass('R'); }
} );

我知道你没有问这个问题,但你提到了“用户问题”,所以我正在读你的问题。对于可用性,我不是说切换到Dojo而不是JQuery。事实上,我最终使用的是JQuery而不是Dojo,因为它似乎有更大的追随者。但是,Dojo有一种很好的方法来验证表单数据并为用户提供即时反馈而不会烦人。您可能需要查看一下为用户提供良好UI流程的想法。