2011-09-17 5 views
0

私はjQueryやbacic JSでもあまりよくないと認めますが、私はかなりクールなフォームで自分のやり方をハックしましたが、私を助ける人が必要です最終的な問題です。jqueryはプラグインと無視を確認します(JavaScriptとjquery初心者)

$(document).ready(function(){ 

var ignoreClasses=""; 

//this hides or shows the specific sections base ond the relationship select 
$("#relationship").change(function() { 
    switch ($(this).val()){ 

     case 'prospective-customer': 
      $(".interest_all").hide(); 
      $("#interest_1").show(); 
      ignoreClasses = '.s2,.s4,.s5'; 
     break; 
     case 'current-cutomer': 
      $(".interest_all").hide(); 
      $("#interest_2").show(); 
      ignoreClasses = '.s1,.s4,.s5'; 
     break; 
     case 'prospective-partner': 
      $(".interest_all").hide();    
      $("#interest_3").show(); 
     break; 
     case 'applicant': 
      $(".interest_all").hide();   
      $("#interest_4").show(); 
      ignoreClasses = '.s1,.s2,.s5'; 
     break; 
     case 'vendor':   
      $(".interest_all").hide();   
      $("#interest_5").show(); 
      ignoreClasses = '.s1,.s2,.s4'; 
     break; 

     default: 
      $(".interest_all").hide(); 
     } 
}); 

// field validation 
$("#leadform").validate({ 

    //I need to get the ignore class in here 
    //like ignore: '.s2,.s4,.s5' 


}); 

});

(.validateに中のvar ignoreClassesを取得する方法があります)


どうもありがとうございましたジョナサン、無視に値を取得するために動作します。しかし問題がある。ユーザーが#Relationship選択ボックスを変更した場合にのみ、フォーム全体の検証が機能します。ユーザーが自分の名前を完了すると、フォームの送信はクリックされません。

+0

**は、varを.validate()**に設定するとどういう意味ですか? – Blender

答えて

0

$("#leadform").validate({ ignore: ignoreClasses});

あなたはvalidate methodにオブジェクトを渡しているので、あなたはJSONの構文を使用する必要があります。

さらに、パフォーマンスを向上させるためにjQueryセレクタをキャッシュすることをお勧めします(この場合は大したことではありませんが、それは良い方法です)。

http://jsfiddle.net/jondum/Tua6c/

0

あなたは.validation()ignoreClassesで実行したい場合は、あなたのchangeイベントリスナーの中に指定した、あなたは、イベントリスナー内から.validation()メソッドを呼び出す必要があります。つまり、.validate()が実行されているときは、ignoreClassesは定義されません。

$(document).ready(function() { 

    var ignoreClasses = ""; 

    var $interests_all = $(".interest_all"); 

    //this hides or shows the specific sections base ond the relationship select 
    $("#relationship").change(function() { 
     switch (this.value) { 

     case 'prospective-customer': 
      $interests_all.hide(); 
      $("#interest_1").show(); 
      ignoreClasses = '.s2,.s4,.s5'; 
      break; 
     case 'current-cutomer': 
      $interests_all.hide(); 
      $("#interest_2").show(); 
      ignoreClasses = '.s1,.s4,.s5'; 
      break; 
     case 'prospective-partner': 
      $interests_all.hide(); 
      $("#interest_3").show(); 
      break; 
     case 'applicant': 
      $interests_all.hide(); 
      $("#interest_4").show(); 
      ignoreClasses = '.s1,.s2,.s5'; 
      break; 
     case 'vendor': 
      $interests_all.hide(); 
      $("#interest_5").show(); 
      ignoreClasses = '.s1,.s2,.s4'; 
      break; 

     default: 
      $interests_all.hide(); 
     } 
     // field validation (now being called from within the change listener) 
     $("#leadform").validate({ 
      ignore: ignoreClasses 
     }); 
    }); 
}); 
+0

大変ありがとうございます。値を無視するようになっています。しかし問題がある。ユーザーが#Relationship選択ボックスを変更した場合にのみ、フォーム全体の検証が機能します。ユーザーが自分の名前を完了すると、フォームの送信はクリックされません。 – Marc

+0

そして、あなたがする必要があるのは '$(document).ready()'の 'ignoreClasses' _outside_を宣言してグローバル変数にすることです。次に、あなたの 'validate'関数を使ってサブミットリスナーを使ってサブミットを行います:' $( 'form#leadform')submit(function(){invalidate({ignore:ignoreClasses});}); ' –

+0

また、 'ignoreClasses'は' window ['ignoreClasses'] = "" 'のように宣言することもできます。その後、送信ハンドラで同じ方法を参照します。 –

関連する問題