2013-03-10 30 views
0

我必須根據使用條件最小長度。(我想在自己的它也不能工作,反正)jQuery驗證插件的使用MINLENGTH不起作用

沒有與「需要」的規則沒有問題。如果條件成立,我可以看到所需的消息,「所需」規則按預期工作,我也可以在控制檯上看到「快樂的一天」。

但即使我可以在控制檯中看到「最小長度5」,它的行爲就像表單一樣。

我在哪裏錯了?謝謝。

if($('form#form_validation_reg_generate_user').valid({ 


             rules: { 

              'userPassword':{ 
               required:(function() { 
                if($('#userPassword').val().length >0) { 
                 console.log('happy day'); 
                 return true; 
                } 
                else{ 
                 console.log('happy day false'); 
                 return false; 
                } 
                })(), 
               minlength:(function() { 
                if($('#userPassword').val().length >0) { 
                 console.log('min length 5'); 
                 return 5; 

                } 
                else{ 
                 console.log('min length 0'); 
                 return 0; 
                } 
                })()   

              } 

             } 

            })) 

回答

0

你的代碼是完全錯誤的:

if ($('form#form_validation_reg_generate_user').valid({ 
    // your rules 
})); 

您與.validate()混合起來.valid()。你不應該聲明.valid()中的任何內容,也不能將.validate()置於條件內。

.validate() is called once to initialize the plugin on the form。這不是一種按需觸發驗證的方法。一旦初始化,表單將根據內置於插件中的各種事件回調自動驗證,例如submit,onkeyup,onfocusout,並選擇按鈕&複選框click

要以編程方式進行驗證測試,你可以叫the built-in .valid() method這是非常喜歡的submit事件,它會觸發整個窗體的驗證測試和形式將顯示任何錯誤。 .valid()也將返回布爾值truefalse,指示表單是否通過了驗證測試。在您的示例/案例中,您似乎不需要使用此方法。


您的規則的代碼是不合邏輯:

required: (function() { 
    if ($('#userPassword').val().length > 0) { 
     return true; 
    } else { 
     return false; 
    } 
}, 
minlength: (function() { 
    if ($('#userPassword').val().length > 0) { 
     return 5; 
    } else { 
     return 0; 
    } 
} 

你的規則邏輯使得完全沒有意義而這些功能使插件嗆。第一條規則是說userPassword只有在userPassword包含某些東西時纔是required。這在邏輯上與「可選」相同。你的第二條規則是說的minlength5只有當userPassword包含某些東西...再次沒有任何意義。如果該字段是可選的,那麼您只需聲明minlength,並且默認情況下僅當字段包含某些內容時才適用。 (您沒有顯示您的HTML,所以我只假設userPassword是同一字段的nameid。)

試試這個:

$(document).ready(function() { 

    $('form#form_validation_reg_generate_user').validate({ 
     rules: { 
      userPassword: { 
       minlength: 5 
      } 
     }, 
     submitHandler: function (form) { // for demo 
      alert('valid form submission'); // for demo 
      return false; //form demo 
     } 
    }); 

}); 

DEMO:http://jsfiddle.net/7jLnu/

否則,如果你也想現場required

rules: { 
    userPassword: { 
     required: true, 
     minlength: 5 
    } 
}, 

http://jsfiddle.net/qZzZ6/

+0

'規則:{ userPassword:{ required:true, minlength:5 } },'用這些代碼警告,如果'userPassword'中沒有字符。我明白沒有機會有條件地驗證輸入,對嗎?由於 – merveotesi 2013-03-10 17:37:43

+0

另外這款'$( '#形式form_validation_reg_generate_user')驗證({ 規則:{ 的userPassword:{ 使用MINLENGTH:5 } }'是沒有意義的,而不需要 – merveotesi 2013-03-10 17:39:15

+0

@tuxi,「'minlength'沒有。所需要的「是非常有意義的......它只是意味着該字段是可選的,但是,如果你填寫它,它必須至少有5個字符。是的,你可以有條件規則,但你需要準確解釋你想要什麼,而不是通過查看破碎的代碼來進行猜測 – Sparky 2013-03-10 17:42:39