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 を返します。ラジオボタンがチェックされている場合に1を返す関数「hola」が必要な場合は、次のようなものが必要です。

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

holareturnステートメントさえありません。これが、何も返さない理由です (より正確には、undefined常に返す)。

functionステートメントをまったく含まないJavaScript 、returnまたはすべてのreturnステートメントがネストされたfunctions内にある JavaScript は、 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 に答える