0

一般的な検証関数を男性化しようとしましたが、長さの検証に問題があると思います。関数は2番目の入力では機能しますが、最初の入力では機能しません。ここjsFiddleで確認できます。

======> http://jsfiddle.net/RochesterFox/N2HyE/1/

HTML:

    <input type="text" name="number" class="verify" conditions="requierd numeric"/>
    <input type="text" name="number2" class="verify" conditions="requierd lenght:5 numeric"/>

javascript:

function getVal(field, array){
            arr = jQuery.grep(array, function (value) {
                search = field;
                if(value.match(search)) return true;
                return false;
            });
            var vals = arr[0].split(':');
            return vals[1];
        }
        $('.verify').blur(function(){
            var conditions = $(this).attr('conditions').split(' ');
            var state = [];
            if ($.inArray('requierd', conditions) > -1){
                if($(this).val() === '') state.push('invalid');
                else state.push('valid');
            }
            else $(this).removeClass('invalid').addClass('valid');
            if ($.inArray('numeric', conditions) > -1){
                if($.isNumeric($(this).val()) === false) state.push('invalid');
                else state.push('valid');
            }
            if(getVal('lenght', conditions) != ''){
                if($(this).val().length < getVal('lenght', conditions)) state.push('invalid');
                else state.push('valid');
            }
            if(($.inArray('invalid', state) > -1) === false){
                $(this).removeClass('invalid').addClass('valid');
                verif();
            }
            else{
                $(this).removeClass('valid').addClass('invalid');
            }
        });

        function verif(){
            var state = 'none';
            $('.verify').each(function(){
                if($(this).hasClass('invalid')) state = 'invalid';
            });
            if(state != 'invalid'){
                //VALID !
                $('body').append('VALIDATED');
            }
        }
4

1 に答える 1

0

上記の私のコメントに加えて、私はあなたが非常に迅速な修正でjsfiddleであることをフォークしました。

http://jsfiddle.net/mNUfG/

既存のクライアント側検証ライブラリを本当に使用したくない場合、このような問題でより頻繁に実行したくない場合は、コードをさらにクリーンアップする必要があります。

また、jsfiddleの「JsLint」ボタンを使用して、コードのエラーを見つけることもできます。

于 2012-08-28T22:01:11.127 に答える