2012-05-08 75 views
0

下面的代碼用於驗證一組selectbox,但是它不會在發佈驗證後發佈並轉到該帖子頁面,如何解決該問題?我增加了返回true;在最後,但它似乎不工作,謝謝。驗證後無法發佈數據

var $selects = $('form select[name^=select]'), 
    values = []; 

$(':submit').click(function(e) { 
    e.preventDefault(); 
    values = []; 
    $($selects).each(function() { 
     if($(this).val()) { 
      values.push($(this).val());   
     } 
    }); 
    if(!values.length) { 
     alert('Please select all categories'); 
     return false; 
    } 
    if(values.length < $selects.length || $.unique(values).length < $selects.length) { 
    alert('Please select all categories and be unique'); 
    return false; 
    } 
    return true; 
}); 
+1

還有e.preventDefault();這可以防止提交 –

+0

但這是用於停止提交和開始驗證 –

+0

@LeoChan返回true/false做工作 –

回答

2
$(':submit').click(function(e) { 
    //e.preventDefault(); delete this. 

它阻止的默認行爲提交按鈕 - 提交表單...

return false是否e.preventDefault(); + e.stopPropagation();

+0

你的意思是將返回false替換爲e.preventDefault(); + e.stopProprgoation()? –

+0

@LeoChan。不,我的意思是當你想驗證失敗時,返回false就足夠了。刪除'e.preventDefault();' – gdoron

+0

謝謝,但如果我刪除這一行,那麼它將發佈沒有任何驗證 –

0

有一些塊,你的事件監聽器默認動作

var $selects = $('form select[name^=select]'), 
      values = []; 

     $(':submit').click(function(e) { 
      //e.preventDefault(); <--remove this line 
      values = []; 
      $($selects).each(function() { 
       if($(this).val()) { 
        values.push($(this).val());   
       } 
      }); 
      if(!values.length) { 
       alert('Please select all categories'); 
       e.preventDefault(); //<--PUT IT HERE~!!! 
       return false; 
      } 
      if(values.length < $selects.length || $.unique(values).length < $selects.length) { 
      alert('Please select all categories and be unique'); 
      e.preventDefault(); //<-- AND PUT IT HERE~!!! 
      return false; 
      } 
      return true; 
     }); 
+0

如果我刪除這一行,那麼它會發布沒有任何驗證 –

+0

如果你的代碼就行了,代碼將不會繼續下面... –

+0

我已經修改了我的答案,看看我把它放在哪裏阻止執行的代碼 –

0

當你想要提交你需要$('form').submit()

相關問題