1

私は他の2つの関数を呼び出すこの単純なjavascript関数を持っています:

<script type="text/javascript" language="javascript">

    function mainfunction() {
        function1()
        function2()
    }

    function function1() {
        if (//some test) {
            alert('test function1');
            return false;
        }
    }

   function function2() {
        if (//some test) {
            alert('test function2');
            return false;
        }
    }

</script>

私はmainfunction()このように呼び出します:

<form id="form1" runat="server" onSubmit="return mainfunction()">

またはこのように:

<asp:Button ID="btntest" runat="server" Text="test button" OnClientClick="return mainfunction()" />

btntest別のページにリダイレクトするクラスを呼び出すだけのボタンです。


問題

  • 2つの関数のいずれかを直接呼び出すとfunction1()function2()ボタンが実行されなくなります。これが必要です。しかし...:
    私が呼び出すとmainfunction()、各機能のアラートが機能return false;しますが、残念ながらボタンが実行されるため機能しないようです。

何故ですか?どうすれば2つの関数を呼び出してreturn false;動作させることができますか?

4

3 に答える 3

1

あなたmainfunctionは何も返していません。これを試して:

function mainfunction() {
    return function1() && function2();
}

コメントで述べたように、mainfunction適切に機能させるには、他の関数を変更して、常にまたはのいずれtrueかを返す必要がありfalseます。

function function1() {
    if (//some test) {
        alert('test function1');
        return false;
    }
    return true;
}

EDITtrue両方の関数が実行され、両方の関数が次の場合にのみ 戻るという面白いハックtrue

function mainfunction() {
    return (function1() + function2()) === 2;
}
于 2013-03-03T21:18:26.117 に答える
0

これを試して:

<asp:Button ID="btntest" runat="server" Text="test button" OnClientClick="mainfunction(); return false;" />

これも同様に機能します:

<asp:Button ID="btntest" runat="server" Text="test button" OnClientClick="return mainfunction();" />

ただし、mainfunction を変更する必要があります。

function mainfunction() {
    function1();
    function2();
    return false;
}
于 2013-03-03T21:31:02.143 に答える
0

mainfunction何も返さない、function1またはどちらからの戻り値も使用していないfunction2

フォームが送信されないようにするには、ハンドラー自体が false を返す必要があります。次に例を示します。

function mainfunction() {
    function1();
    function2();

    return false; // prevent form submission
}

undefined (質問の例で現在行っていること) を返すだけでは不十分です。

于 2013-03-03T21:17:22.747 に答える