0

こんにちは関数がどのように値を返すかを理解したいと思います。1つは機能していて、もう1つは機能していないという2つの機能があります。2番目の機能が機能しない理由を知りたい。 http://jsfiddle.net/95vXQ/5/

ここに画像の説明を入力してください

これが機能していない2番目の機能です。なぜ変わらないのかisVisiblevalue

ここに画像の説明を入力してください

4

5 に答える 5

2

isVisibleクリック機能内で定義されているため、2番目のスクリーンショットは機能しません。その機能が完了isVisibleすると、設定が解除されます。クリック関数を再度呼び出すと、isVisibleリセットされ、値がtrueに戻ります。これは可変スコープと呼ばれます。

そして、この問題は戻り値とは何の関係もありません。値を返すには、を使用する必要がありますがreturn [varname]、それはクリック関数内では役に立ちません。

于 2012-08-27T11:00:49.817 に答える
2

可変スコープ問題です。詳細については、こちらをご覧ください。簡単にするために、関数内で定義した変数は、関数外では未定義です。

また、2番目のスクリーンショットの関数は、クリックイベントが発生するたびにその関数が実行されるため失敗しています。つまり、isVisible値をリセットしている場合でも、真の値を設定してisVisibleを再度初期化しているため、次の呼び出しには実行されません。それ。

于 2012-08-27T11:48:31.983 に答える
2

jQueryクリック関数はこのリンクで明確に説明されています。クリック関数を使用して、オブジェクトのクリック時に単一または一連のjQueryイベントをトリガーできます。関数で宣言された変数は、そのクリック関数内でのみ機能します。クリック関数で値を返すことはできず、イベントのみをトリガーできます。

于 2012-09-07T11:47:46.240 に答える
2

関数内で値trueを再割り当てしているため、2番目の例は期待どおりに機能しませんisVisibleisVisibleクリック関数内で宣言している場合、スコープは関数内にのみ存在することに注意してください。

上記の例の動作を知りたいだけで、関数の外部で変数を宣言することに興味がない場合は、このjsfiddleを試してください

表示/非表示機能を実行する場合は、このトグルjsfiddleを試してください。以下のコード。

$(function(){
    $("#btnShow").toggle(
        function(){
            $(this).val("Show");
            $("#divContent").hide();
        },
        function(){
            $(this).val("Hide");
            $("#divContent").show();
        }
    );    
});
于 2012-09-07T15:57:32.787 に答える
0

とてもシンプルです。

  1. ボタン=非表示; Divコンテンツが表示されます
  2. [非表示]をクリックします。これで、IsVisibleはTrueになります。そしてそれは隠れます。ボタン=表示; Divは非表示です
  3. 次に、[表示]をクリックします。Clickハンドラーはコードを再度実行し、変数IsVisibleを新しいものとして作成し、trueに設定されます。div(すでに非表示になっています)を非表示にし、ボタンは引き続き[表示]を表示します。

最初のケースでは、これはグローバル変数であるため、非表示にした後でFalseに更新されると、divが再び表示されます。

まだはっきりしていませんか?

于 2012-09-10T14:24:51.990 に答える