2012-10-24 66 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; 
     } 
    } 

现在它工作。