1

私は JavaScript の初心者で、関数のブール値を返すことができません。null のテキスト ボックスを検証していて、空のヘルプがあれば false を返しますか?

validateForm : function() {
    $('.requiredField :input').each(function(){
        if ('input[type=text]'){
            if($(this).val().length === 0){
                    $(this).addClass('warning');
                    var  errorMsg = $('<br /><span>Please Fill in the TextBox</span>').addClass('warning');
                    errorMsg.insertAfter(this);
                    $(errorMsg).css('color','red');
                    $('.warning').css('border-color','red');
            //$(this).focus(function(){
                //$(this).removeClass('warning');   
                //$(this).parent().children('span').remove();
                //$(this).parent().children('br').remove();         
            //});
                    return false;
                }
            else 
                return true;
            }
        }); 

},
Form.validateForm(); // call to the function 
4

5 に答える 5

2

あなたはのreturnから ing しています。それはあなたの関数に値を返させません。.each()

.each()ループでreturn false;は、 を使用するようなものでbreak;あり、を使用するreturn true;ようなものcontinue;です。

の外側で変数を宣言し、ループ.each()でその値を設定してから、ループのにそれを返す必要があります。

于 2013-03-04T17:48:42.490 に答える
0

プラグインを作成しようとしているようですか?次のコードを試してください。

(function($) {
    $.fn.validateForm = function()
    {
        var formID = $(this).attr('id');

        $('#'+ formID +' input[type=submit]').click(function(e)
        { 

            e.preventDefault();

            $('input[type=text]').each(function(){

                if($(this).val().length === 0){                 

                        $(this).addClass('warning');
                        var  errorMsg = $('<span>Please Fill in the TextBox</span>').addClass('warning');
                        errorMsg.insertAfter(this);
                        $(errorMsg).css('color','red');
                        $('.warning').css('border-color','red');          
                        return false;
                }else{
                    return true;
                }
            });
        });
    };
})(jQuery);
于 2013-03-04T19:00:26.013 に答える
0

@RocketHazmatで言及されているように、すべての入力を検証(およびcssクラス/ html要素を追加)するために、関数は内側のループからの結果を集約し、単一の出口点を持つ必要があります。

あなたはこのようなことをする必要があります:

validateForm : function () {

        var invalidInputs = [];

        // only test the type='text' inputs
        $('.requiredField :input[type="text"]').each(function () {

            // if there is no value
            if ($(this).val() == undefined || $(this).val().length == 0) {

                $(this).addClass('warning');
                var errorMsg = $('<br /><span>Please Fill in the TextBox</span>').addClass('warning');
                errorMsg.insertAfter(this);
                $(errorMsg).css('color','red');
                $('.warning').css('border-color','red');

                // add the invalid input to an array
                invalidInputs.push($(this));
            }
        }); 

        // The form is only valid for no invalid inputs were found.
        return invalidInputs.length == 0;
    }
于 2013-03-04T19:38:15.493 に答える
0

この行を確認してください

if ('input[type=text]'){

そのはず

 if($('input[type=text]')){
于 2013-03-04T17:51:58.517 に答える
0

これを試すことができます:

$('.requiredField :input').each(function(){
var i=$(this).val();

if(i == '' || i == null)
 {
 //execute your codes
 return false;
 }else{
 return true;
 }
});
于 2013-03-04T17:59:48.707 に答える