1

基本上我有一个脚本函数“ 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

4 回答 4

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如果您愿意,您可以使用表示“不接受”的值而不是返回值def.reject(),然后使用.fail处理程序注册要为该条件调用的处理程序。

于 2012-08-29T11:03:48.257 回答
3

您仅在单选按钮的单击功能中返回 1。如果你想要一个函数“hola”在选中单选按钮时返回 1,你只需要这样的东西:

function hola() {
  return $("input:radio[name='yN']:checked").val();
}
于 2012-08-29T11:02:47.437 回答
0

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

function根本不包含return语句或所有return语句都在嵌套s 中的 JavaScriptfunction将永远不会返回除undefined.

于 2012-08-29T11:02:57.257 回答
-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;
}
于 2012-08-29T11:05:10.587 回答