2011-07-02 5 views
0

$ .ajax()コール(追加の検証が実行される)を使用する前に初期検証を行い、サーバー。現在、私は次のように使用しています:

$('.form_submit').submit(function() {  
     var frm = $(this); 
     var url = frm.attr('action'); 
     var data = $(this).serializeArray(); 
     var proceed = true; 
     $.each(data, function(index, value) { 
      var name = data[index].name; 
      if ($('#' + name).hasClass('required') && value == '') { 
       $('.label_' + name).append('Please provide the value'); 
       proceed = false; 
      } 
     }); 
     if (proceed) { 
      $.ajax({ 

が、変数「を進める」の値は、考慮の下で撮影されていないようですし、検証がまっすぐAJAXに行きます。

ご協力いただきありがとうございます。

+0

多分あなたは[jquery validation plugin](http://docs.jquery.com/Plugins/validation)の使用を検討することができますか? – JMax

+0

あなたはこれを見ています - 私は本当にプラグインを使いたくないのですが、どうやってそれを行うのか分かりました。 – user398341

答えて

0

私はそれを達成し、(例えばラジオボタン、テキストエリアなどのような)だけでなく他のすべてのフィールドのサポートを追加する方法を考え出した - ここに私が作ってみたものです:

$('.form_submit').submit(function() { 
    $('.warn').remove();  
    var frm = $(this); 
    var url = frm.attr('action'); 
    var data = $(this).serializeArray(); 
    var radios = frm.find('input:radio'); 
    var checks = frm.find('input:checkbox'); 
    var proceed = true; 
    $.each(radios, function(index, value) { 
     var elem = frm.find('input[name='+radios[index].name+']'); 
     if (elem.hasClass('required') && $("input:radio[name="+radios[index].name+"]:checked").length == 0) { 
      var val = elem.attr('title'); 
      if ($('.label_' + radios[index].name).find('.warn').length == 0) { 
       $('.label_' + radios[index].name).append('<span class="warn">'+val+'</span>'); 
      } 
      proceed = false; 
     } 
    }); 
    $.each(checks, function(index, value) { 
     var elem = frm.find('input[name='+checks[index].name+']'); 
     if (elem.hasClass('required') && $("input[name="+checks[index].name+"]:checked").length == 0) { 
      var val = elem.attr('title'); 
      $('.label_' + checks[index].name).append('<span class="warn">'+val+'</span>'); 
      proceed = false; 
     } 
    }); 
    $.each(data, function(index, value) { 
     var elem = frm.find('[name='+data[index].name+']'); 
     var elem_type = elem.prop('nodeName'); 
     if (elem.hasClass('required') && elem.val() === '') { 
      var val = elem.attr('title'); 
      $('.label_' + data[index].name).append('<span class="warn">'+val+'</span>'); 
      proceed = false; 
     } 
    }); 
    if (proceed == true) { 
     $.ajax({ // here start server side validation 

I 'input'フィールドの 'title'属性にバリデーションメッセージを割り当てました。これにより、各タグごとに異なることができます。ラジオボタンを使用すると、最初のボタンに 'title'を追加するだけです。

関連する問題