0

JavaScript関数を終了する方法に関する次の投稿を読みました。

JavaScript関数を終了するにはどうすればよいですか?

この例を自分のコードに適応させようとしていますが、何かが足りない/何か間違っています。

次のjqueryコードがあります:

    $('#main_submit_button').live('click', function(){  

        check_for_duplicate_rule().done(function(result) {
                    console.log("result from check for duplicate" + result);
                    if (result == 'true') {                 
                        $('#validation_error').html("A similar rule already exists");
                        return;
                    }
            });
        //}
        console.log("i made it this far");
        return false;
        console.log($('#rule_form').serialize() );

}

重複データを使用してテストすると、システムは「同様のルールが既に存在します」というエラーを正しく表示しますが、コンソールには「ここまでできました」というメッセージも表示します。フォーム serialize() コマンドの結果は表示されません。エラーメッセージを設定した後、コードが.clickイベントハンドラーを終了することを期待していました。

「return」ステートメントを「return false」に変更しようとしましたが、それも機能しません。私が間違っていることを教えてもらえますか?最終的に、このルーチンで実行したいことは、サーバーにデータを送信する前に、クライアント側の検証チェックをいくつか実行することです。そのため、関数には「戻る」または終了する必要がある複数のポイントがあります。

ありがとう

編集1

コードを次のように変更しました。

            var bduplicate = false;
            check_for_duplicate_rule().done(function(result) {
                    console.log("result from check for duplicate" + result);
                    if (result == 'true') {                 
                        $('#validation_error').html("A similar rule already exists");
                        bduplicate = true
                        return;
                    }
            });
        //}
        if (bduplicate) {
            return;
        }
        console.log("i made it this far");

しかし、それでも「ここまでできました」というメッセージが出力されます。check_for_duplicate_rule 関数に問題がある可能性があると思います。?? 次のようになります。

    function check_for_duplicate_rule() {
            var parameters = {
                  num: $('#num').val(),
                  condition: $('#condition').val(),
                  cdidnumber: $('#cdidnumber').val()
            }   

            return $.getJSON(       
                    url = aURLdefinedsomewhere,
                    parameters,
                    function(data)  {
                            //if (data=='true') {                               
                                //$('#validation_error').html("A similar rule already exists");     
                            //}
                    }//end data
                );//end getJSON     
        }

コンソールに表示されているのは、「重複する真のチェックの結果」メッセージが「ここまで成功した」の後に出力されていることです。これは、持っていない結果をチェックしていることを示しているようです... ? これが本当なら、私はそれを修正する方法を本当に知りません。

4

3 に答える 3

0

return inside は.done(function(result) { })、この関数からではなく、単に終了します.live('click', function(){ })

このようにコードを書き直す必要があります

$('#main_submit_button').live('click', function(){  

    result = check_for_duplicate_rule()
    console.log("result from check for duplicate" + result);
    if (result == 'true') {                 
                    $('#validation_error').html("A similar rule already exists");
                    return;
    }
    console.log("i made it this far");
    return false;
    console.log($('#rule_form').serialize() );
于 2013-07-29T14:38:21.950 に答える
0

に置き換えるreturn falsereturn、その後のconsole.logは未定義になります!!!

returnundefinedを返す関数を終了します。

 $('#main_submit_button').live('click', function() {
        check_for_duplicate_rule().done(function(result) {
            console.log("result from check for duplicate" + result);
            if (result == 'true') {                 
                $('#validation_error').html("A similar rule already exists");
                return;
            }
        });
    //}
        console.log("i made it this far");
        return;//replace return false with return.
        console.log($('#rule_form').serialize() );//this will be undefined
    }

: undefinedreturn返します。false

  • break : ループを終了するため
于 2013-07-29T14:32:55.260 に答える
0

@tymeJV のコメントをさらに詳しく説明すると、最初の戻り値はdone関数を非同期的に返すことです。メソッドの残りの部分には影響しません。

于 2013-07-29T14:32:55.443 に答える