由于某种原因没有返回值

时间:2012-08-29 10:55:25

标签: javascript jquery

基本上我有一个脚本函数“hola ()”,如果单选按钮值为1,它应返回值1.但由于某种原因,当我尝试在另一个函数中获取返回值时,我从未得到它

表单完美运行..唯一的问题是它不会返回值

谁能告诉我我做错了什么?感谢

$(document).ready(function(){
    function hola() {
        $("form[name=yN]").show("slow");
        $('input[type=radio]').click( function (){
            var opt = $(this).attr("value");

            if (opt == "1") {
                this.checked = false;
                $("form[name=yN]").hide("slow");
                return 1;
            }

            if (opt == 0) {
                $("p").html ("ok");
                this.checked = false;
            }
        }) 
    }

    $("#iForm").submit( function(event){
        event.preventDefault();

        var user = $("input[name=username]").val();
        var password = $("input[name=password]").val();
        var dbName = $("input[name=dbName]").val();
        var server = $("input[name=server]").val(); 

        $.get("1.php", 
              {username: user, password: password, dbName: dbName, server: server },
              function(data){
                 if (data == "The table PAGE exists" || data == "The table SUBJECTS exists" || data == "The table USERS exists" ) {
                    // CALLING THE hola () function and expecting a return 
                    var opt = hola();
                    $("p").html(data + opt);
                 }
              }
        )
    })
})

HTML

<!-- Yes or No form -->
<form  name="yN" style= "display: none; margin-left: auto; margin-right: auto; width: 6em">
<input type="radio" name="yN" value="1">yes</input>
<input type="radio" name="yN" value="0">no</input>
<button id=1 >click me!</button>
</form>

<!-- Login Form -->
<form id="iForm"  style= "display: show">
<label id="username" >Username</label>
<input id="username" name="username"/>
<label id="password">Password</label>
<input id="password" name="password" />
<label id="server" >Server</label>
<input id="server" name="server"/>
<label id="dbName" >dbName</label>
<input id="dbName" name="dbName"/>

<input type="submit" value="submit" />
</form>
<p> </p>

4 个答案:

答案 0 :(得分:4)

事件处理程序不能return值,因为它们是异步调用的。*

您现有的hola()函数会立即返回,return处理程序中的click语句只会在稍后调用,即单击按钮时。

我的方法是使用jQuery延迟对象(jQuery 1.6 +):

function hola() {
    var def = $.Deferred();

    // show the popup confirm form
    ...

    $('input[type=radio]').click(function() {
        // determine return value
        ...

        // send it back to anything waiting for it
        def.resolve(retval);
    });

    // return a _promise_ to send back a value some time later
    return def.promise();
}

$.get("1.php", { ... }).done(function(data) {
    if (...) {
        hola().done(function(opt)) { // will be called when the promise is resolved
            $("p").html(data + opt);
        });
    }
});

如果您愿意,可以使用opt来表示&#34;不接受&#34;而不是返回def.reject()值。然后使用.fail处理程序注册要为该条件调用的处理程序。

答案 1 :(得分:3)

仅在radiobutton的click功能中返回1。 如果你想要一个函数“hola”,如果选中radiobutton则返回1,你只需要这样的东西:

function hola() {
  return $("input:radio[name='yN']:checked").val();
}

答案 2 :(得分:0)

hola甚至没有return语句。这就是它没有返回任何东西的原因(更确切地说:总是返回undefined。)

根本不包含function语句或所有return语句都在嵌套return内的JavaScript function将永远不会返回undefined之外的任何内容}。

答案 3 :(得分:-1)

您正在尝试从单击回调函数中返回值。将返回移到:

之外
function hola() {
    var result;

    $("form[name=yN]").show("slow");
    $('input[type=radio]').click( function (){
        var opt = $(this).attr("value");

        if (opt == "1") {
            this.checked = false;
            $("form[name=yN]").hide("slow");
            result = 1;
        }
        if (opt == 0) {
            $("p").html ("ok");
            this.checked = false;
        }
    });

    return result;
}