【问题标题】:How can i get my JS to return true or false?我怎样才能让我的 JS 返回真或假?
【发布时间】:2012-04-29 15:55:11
【问题描述】:

当变量 'f' 为 FALSE 时,我想返回 TRUE 或 FALSE。但是返回永远不会到达浏览器,并且表单会执行其默认操作。

如何让我的 ELSE 返回值? 我试图硬编码一个返回值而不是写 'return myFunction();' 这行得通,但它对我没有帮助,因为我需要从 'myFunction()强>'。

不要想太多代码应该做什么,它没有意义,它只是为了演示。

$('#theForm').submit(function()
{

    var f = $('#theInput').val(); // input value

    if(f == TRUE)
    {
        alert('Lorem ipsum');

        return false;
    }
    else // If f is FALSE
    {
        $.post('/php/check.php',{check: f, function(data){myFunction(data);});

        function myFunction(data)
        {

            if(data == 'false')
            {
                // Do something
                return false;
            }
            else
            {
                // Do something
                return true;
            }
        }

        return myFunction();
    }

 });

我已经尝试过了,但它仍然没有从 'return myFunction()' 向表单返回值

$('#theForm').submit(function()
{

    var f = $('#theInput').val(); // input value

    if(f == true)
    {
        alert('Lorem ipsum');

        return false; // Stop default form action
    }
    else // If f is FALSE
    {

     var request = $.ajax({
        async: false,
        url: "/php/checkArea.php",
        type: "POST",
        data: {data: f},
        dataType: "text"
        });

        request.done(function(data) {
            myFunction(data);
        });

        function myFunction(data)
        {

            if(data == 'false')
            {
                // Do something
                return false; // Stop default form action
            }
            else
            {
                // Do something
                return true; // YES PLEASE, do the default form action
            }
        }

        return myFunction();
    }

 });

在你的帮助下,我终于想出了一个关于异步部分的解决方案。

$('#theForm').submit(function()
{

    var f = $('#theInput').val(); // input value

    if(f == true)
    {
        alert('Lorem ipsum');

        return false; // Stop default form action
    }
    else // If f is FALSE
    {

     var request = $.ajax({
        async: false,
        url: "/php/checkArea.php",
        type: "POST",
        data: {data: f},
        dataType: "text"
        });

        request.done(function(data) {
            globalData = data; // Global variable
        });

        function myFunction(globalData)
        {

            if(globalData == 'false')
            {
                // Do something
                return false; // Stop default form action
            }
            else
            {
                // Do something
                return true; // YES PLEASE, do the default form action
            }
        }

        return myFunction(globalData); // Call the function with the global variable
    }

 });

这很完美:-)

【问题讨论】:

  • 您的 myFunction() 在您的 $.post Ajax 调用返回值之前运行。使用 async: false 和你的 $.post
  • 现在试试下面我编辑的解决方案。它现在应该可以工作了,除非你做错了什么。
  • 在您编辑的问题中将此行 data: {data: f}, 更改为 data : f,

标签: php forms return return-value


【解决方案1】:

这部分应该做你想做的:

if(f == TRUE)
{
    alert('Lorem ipsum');

    return false;
}

然而,这不应该:

    $.post('/php/check.php',{check: f, function(data){myFunction(data);});

    function myFunction(data)
    {

        if(data == 'false')
        {
            // Do something
            return false;
        }
        else
        {
            // Do something
            return true;
        }
    }

    return myFunction();

$.post 将始终立即返回。 myFunction 将在 Ajax 调用完成时被调用,但到那时你已经从 .submit 块返回了!

您可以查看jQuery.ajax,它具有使其同步的设置(将async 设置为false)。这可能会阻止浏览器在等待 Ajax 调用时执行任何其他操作,但这是进行同步调用的唯一方法。

【讨论】:

    【解决方案2】:

    区分大小写可能是个问题。 Javascript 使用truefalse,而不是TRUEFALSE

    在您的else 子句中,您有一个用于处理返回数据的POST 的回调。但是,回调 myFunction 将在代码到达 return myFunction() 后运行——因为它没有参数——将导致匿名函数返回 true

    您需要使您的异步调用同步,但即便如此,myFunction 将其结果返回到哪里?

    您可以尝试强制myFunction 将其结果返回到正确的上下文,如下所示(我更喜欢在使用之前声明该函数),但您仍可能遇到同步问题。从文档中可以看出,$.post 不能强制同步。

    else // If f is FALSE
    {
        function myFunction(data)
        {
            if(data == 'false')
            {
                // Do something
                return false;
            }
            else
            {
                // Do something
                return true;
            }
        }
        return ($.post('/php/check.php',{check: f}, function(data){myFunction(data);}));
    }
    

    【讨论】:

    • myFunction 正在将值返回给表单,因此它知道是否应该执行默认操作。
    • @suer977150:我不相信它是。最后一个return 语句就是这样做的。
    • 好的,但那是我的问题。在其他部分,我想让表单知道它是否应该执行默认操作。但我似乎无法将返回值输出到表单中......
    • @user977150:建议的解决方案,但我无法测试。另请注意,在您的原始代码中,您缺少来自{check:f}}
    【解决方案3】:

    创建一个DIV,它将保存来自$.ajaxfalsetrue

    <div id="result"></div>
    

    现在构建你的 javascript

       $('#theForm').submit( function() {
    
          var f = $('#theInput').val(); // input value
    
          if(f == TRUE) {
    
             alert('Lorem ipsum');
             return false;
    
          } else { // If f is FALSE
    
             var rVal = $('div#result');
    
             $.ajax({
                type : 'POST',
                data : f,
                url : '/php/check.php',
                context: rVal,
                async : false,
    
                success : function (msg) {
                   (msg == 'false') ?  $(this).html('FALSE') : $(this).html(msg);
                }
    
             });
    
            function myFunction(data) {
    
                if(data == 'FALSE'){
                   // Do something
                   return false;
                } else {
                   // Do something
                   return true;
                }
    
            }
    
           return myFunction( rVal.html() );
    
          }
    

    【讨论】:

    • 谢谢,但在其他部分我想让表单知道它是否应该执行默认操作。无论如何,您的代码都会返回 false。所以表单永远不会执行它的默认操作。
    • 我只根据你上面的问题重写你的代码,不管返回是什么以及返回值之后会发生什么。您可以通过在上面的问题中添加更多信息。
    猜你喜欢
    • 2013-10-09
    • 2019-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-06
    • 1970-01-01
    • 2021-06-27
    相关资源
    最近更新 更多