2011-07-02 51 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({ 

但'proceed'變量的值似乎沒有被考慮,並且驗證直接到ajax。

任何幫助,你會非常感激。

+0

也許你可以考慮使用[jQuery驗證插件](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 

我已將驗證消息分配給「輸入」字段的「標題」屬性 - 以便您可以爲每個標記使用不同的驗證消息。使用單選按鈕 - 只需將「標題」添加到第一個按鈕即可。

相關問題