【问题标题】:Two returns doesn't seem to work两次退货似乎不起作用
【发布时间】:2014-04-03 19:23:26
【问题描述】:

我有 html 在表单后运行 javascript,

form name="mortgage" method="post" action=" "onsubmit="return completeFormValidation();">

还有用于验证的 javascript 代码,

主函数:

function completeFormValidation() {

return yearentry1();

return my_location();


} // End of completeFormValidation

main 中的第一个函数:

function yearentry1(){

     var yearval = document.mortgage.mortYear.value;
     alert(yearval);

}

main 中的第二个函数:

function my_location(){

  var numradio = document.mortgage.propLocation.length;
  var selected="";

  for(var i=0; i < numradio; i++){

    if(document.mortgage.propLocation[i].checked == true){
        selected += "Selected radio item " + i;

    }
  }

  if(selected == ""){

    document.getElementById("reserved").innerHTML = "<p> none radio selected </P>";
    return false;

  }

}

返回两次似乎不起作用!当第一个函数通过并返回 TRUE 时 函数退出并发送表单。

如果我可以让所有函数在 main 函数中运行,然后如果 main 中的任何函数返回 false,则返回 false 是否有可能?

【问题讨论】:

  • 您需要在action=" "之后的表单定义中添加一个空格。
  • return 语句之后的代码永远不会被执行,因为正如你所说,第一个 return 将“退出函数”。
  • 这行return my_location();永远不会被执行,因为代码总是会在return my_yearentry();之前返回
  • 不清楚您要完成什么。你可以返回一个数组,但我怀疑这是必要的。
  • 如果yearentry1my_yearentry 相同,则不需要第一个return,因为该函数不会返回任何有用的信息。

标签: javascript html forms function


【解决方案1】:

“return”语句结束了函数,所以在此之后你不能调用任何东西。

错误:

function completeFormValidation() {
    return my_yearentry();
    return my_location();
}

正确:

function completeFormValidation() {
    return my_yearentry() && my_location();
}

但是你的 my_yearentry 函数必须有一个布尔返回值。

【讨论】:

    【解决方案2】:

    您可能只想在两个函数都返回 false 时才提交表单。在这种情况下,您需要以下内容:

    function completeFormValidation() {
    
        return my_yearentry() && my_location();    
    }
    

    http://jsfiddle.net/LgepA/1/

    &amp;&amp; 是“和”。

    在这种情况下,如果第一个函数返回 false,则第二个函数甚至不会被执行。如果您希望 2nd 始终执行,您可以简单地使用 &amp;:

    function completeFormValidation(){
    
        return !!(my_yearentry() & my_location());   
    }
    

    http://jsfiddle.net/LgepA/3/

    或者以更易读的方式:

    function completeFormValidation(){
    
        var yearResult = my_yearentry();
        var locationResult = my_location();
    
        return yearResult && locationResult;   
    }
    

    http://jsfiddle.net/LgepA/4/

    【讨论】:

    • 我想让第二个函数运行然后返回false!
    • 我想要的是让所有函数都运行,如果它们中的任何一个在运行所有函数后返回 false,它将返回 false 并且不提交!
    • 然后使用我列出的第二种方法。只要确保你的函数实际上有一个返回值。您的第一个函数(与被调用的函数名称不同)根本没有返回值。
    • 它会遍历所有函数,但最后会提交!当函数为假时!
    • 您提供的第二个解决方案非常好,谢谢。
    【解决方案3】:

    这是行不通的,因为你的其他功能都没有准备好,但理想情况下你会想做这样的事情:

    function completeFormValidation() {
        return my_yearentry() && my_location();
    }
    

    问题是其他函数都不是总是返回有用的东西。

    如果他们总是返回(理想情况下返回truefalse),那么这将起作用。

    也许

    function yearentry1(){
        var yearval = document.mortgage.mortYear.value;
        return yearval;
    }
    

    function my_location(){
        if(selected == ""){
            document.getElementById("reserved").innerHTML = "<p> none radio selected </P>";
            return false;
        }
        return true;
    }
    

    尽管将验证检查和验证报告混合在一起也可能会出现问题。这可能是一个好的开始。

    【讨论】:

      【解决方案4】:

      一旦函数返回,该函数调用就结束了。

      function completeFormValidation() {
      
          my_yearentry(); // take away return statement, just call the function
                          // you have inconsistent function name below :"yearentry1()"
      
          return my_location();
      }
      

      【讨论】:

        猜你喜欢
        • 2020-09-10
        • 2011-08-18
        • 2013-07-13
        • 2019-04-19
        • 2016-11-29
        • 2016-02-01
        • 2020-09-23
        • 2010-12-05
        • 2011-06-14
        相关资源
        最近更新 更多