2012-10-24 155 views
2

我想返回false或打破foreach循環。但它不起作用。 這是我試過的代碼。返回false不退出foreach循環

function validate() 
    { 
     var validate="false"; 
     var atLeastOneIsChecked = $("input[name='city[]']").is(":checked"); 
     if(atLeastOneIsChecked==true){ 

      $("input:checkbox[name='city[]']:checked").each(function(j){ 
       var city=$(this); 

       $('select[name="category[]"]').each(function(i){ 

        if(i==j){ 
         if($(this).val()=="0"){ 
         alert("Please select hotel category"); 
         city.click(); 
          //validate="false"; 
          return false; 
         } 
         else 
         { 
          validate="true"; 
         } 

        } 
    // return false; 
       }); 
       alert(j); 
       // return false; 
      }); 
      //return false; 
     } 
     else 
     { 
      alert('Please select atleast one city.'); 
      validate="false"; 
     } 
     if(validate=="true"){ 
      return true; 
     } 
     else 
     { 
      return false; 
     } 
    } 

「請選擇酒店類別」後,函數應返回false。但表單在警報後發佈。我沒有什麼錯。

+0

你的'foreach'循環在哪裏!? –

+1

這太棒了:'var validate =「false」'!請注意,JavaScript中有一個[布爾類型](https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/typeof)。 – VisioN

+1

爲什麼不使用'break'? –

回答

0

如果我沒看錯,你可以將這個錯誤是,你認爲這樣的:

if($(this).val()=="0"){ 
    alert("Please select hotel category"); 
    city.click();   
    //validate="false"; 
    return false; 
} 

將防止click處理程序可以發佈形式。返回false部分需要在提交表單之前調用的事件處理程序中發生。

+0

你能告訴我該怎麼做? – asifa

+0

它在第一個循環中,如果它是假的,那麼validate變量設置爲false,但第二次如果條件爲true,那麼驗證設置爲true,並且前面的false被覆蓋,以避免它寫了return false。你能告訴我如何以正確的方式做到這一點。 – asifa

+0

在foreach循環之後,我做了這個if(validate ==「false」){ return false; }謝謝 – asifa

0

把處理表單中的標籤,像這樣:

<form onsubmit="return validate();" method="POST" action="post.php"> 

    .. 

</form> 

然後,它會被調用上提交,如果你在你的函數返回false,它會阻止從形式提交。

+0

我已經這樣做了。我的問題是在if循環不返回false或阻止發佈頁面時返回false。 – asifa

+0

hotelcategory未通過驗證? –

+0

你的問題是你從循環返回。看到這個例子:http://jsfiddle.net/ZBhsy/4/對於一個工作場景 –

0

謝謝大家。我修改了我的代碼

function validate() 
    { 
     var validate="false"; 
     var atLeastOneIsChecked = $("input[name='city[]']").is(":checked"); 
     if(atLeastOneIsChecked==true){ 

      $("input:checkbox[name='city[]']:checked").each(function(j){ 
       var city=$(this); 
       $('select[name="category[]"]').each(function(i){ 
        if(i==j){ 
         if($(this).val()=="0"){ 
          alert("Please select hotel category"); 
          city.click(); 
          city.attr('checked', true); 
          validate="false"; 
          return false; 
         } 
         else 
         { 
          validate="true"; 
         } 
        } 
       }); 
       if(validate=="false"){ 
        return false; 
       } 
      }); 
     } 
     else 
     { 
      alert('Please select atleast one city.'); 
      validate="false"; 
     } 
     if(validate=="true"){ 
      return true; 
     } 
     else 
     { 
      return false; 
     } 
    } 

現在它工作。