1

次の関数を見てください。

<script type="text/javascript"> 

$(function() 
{

    var dataresult = 0;

    $("#Structure #Toggle").click( function()       
    {
        if($("#Structure #Toggle").data("currentstage") )
        {           
            $("#AdvancedOptions").hide();
            $("#Structure #Toggle").html("Show Advanced Options");
            $("#Structure #Toggle").data("currentstage", false);
        }
        else
        {
            $("#AdvancedOptions").show();   
            $("#Structure #Toggle").html("Hide Advanced Options");
            $("#Structure #Toggle").data("currentstage", true);
        }           
    }); 

$(function()ここで、行に別の関数が定義されて いることに気付きました$("#Structure #Toggle").click( function() 。これはどういう意味ですか?

4

5 に答える 5

0

特別な意味はありません。それは本当に単なる別の機能です。

通常、JS の関数は別のオブジェクトです。数値、文字列、配列など、私たちが持っている他の型と何ら変わりはありません。関数を名前に割り当てる方法は 2 つあります。まず、

function something () {}

これは基本的にこれの単なるショートカットです:

var something = function () {}


そのステートメントの 2 番目の形式では、関数がその変数の単なる値であることがはっきりとわかります。そして、すべての値と同様に、関数にパラメーターとして渡すことができます。

つまり、ここで行われること: 最初に、最初の引数として関数を取ることができる関数 $ があります。だから私たちはそれを与えます。その関数内で、別の関数 $(...).click() を呼び出します。この関数も、関数を引数として取ります。それだけです、ここには魔法はありません;)

于 2013-11-01T22:42:40.553 に答える
0

これは、JavaScript が関数をファースト クラスのプリミティブとして扱うためです。次のステートメントを検討してください。

jasons_age = 20;

そして、次の条件:

function canDrinkInTheUS(age) {
  if(age>21) {
     return true;
  } else {
     return false;
  }
}

次のように呼び出します。

canDrinkInTheUS(jasons_age);

ここでは、変数 ( age) の値に値 ( 20) が割り当てられていますが、14 年前canDrinkInTheUS(jasons_age)は false を返していました。ただし、現在この回答を読んでいる時点では、正確ではなくなります。私の年齢を表すより良い方法は、関数として使用することです。ageJavaScriptでは、おそらく次のような関数を作成できます(この巧妙な年齢計算機を使用):

jasons_age_right_now = function() {
  return ~~((Date.now() - new Date(1978,12,25)) / (31557600000));
};

これにより、canDrinkInTheUS 関数を更新して、引数として関数を受け取ることができます。

function canDrinkInTheUS(age) {
  if(age()>21) {
     return true;
  } else {
     return false;
  }
}

それを呼び出すには、jasons_age_right_now次のように渡します。

canDrinkInTheUS(jasons_age_right_now);

()と の末尾を追加していないことに注意してくださいjasons_age_right_now。これは、 の中に入るまで関数が呼び出されないためcanDrinkInTheUSです。

JavaScript では関数を引数として渡すことができるため、次のようにそれ自体が引数を取る関数を返すこともできます。

anyones_age_right_now = function(date_of_birth) {
  return function() {
    return ~~((Date.now() - date_of_birth) / (31557600000));
  };
};

次にjasons_age_right_now、次のように変更します。

jasons_age_right_now = anyones_age_right_now(new Date(1978, 12, 25));

は関数であるためjasons_age_right_now、updated に渡すことができますcanDrinkInTheUS()

于 2013-11-01T23:01:57.740 に答える
0

$(function(){ドキュメントが読み込まれるとすぐにこの関数を実行するように jQuery に指示します。それが発生したら$("#Structure #Toggle").click( function()、id "Structure" / "Toggle" を持つ (過剰修飾された) DOM 要素のクリック イベントのリスナーを登録します。最初にその要素を選択してから、別の関数であるクリック リスナーを追加します。

于 2013-11-01T22:39:29.930 に答える
0

$(function() {...});DOM がロードされた後にその関数を実行します。それは次の略です:

$(document).ready(function() { ... });

その関数が実行されると、以下が実行されます。

$("#Structure #Toggle").click(function() { ... });

This binds the inner function to the click event on the #Structure #Toggle element, so that function will be executed whenever you click on that.

于 2013-11-01T22:40:56.893 に答える
0

Javascript では、他の関数内に関数を含めることができます。あなたの場合

$(function() {/*...*/})

ドキュメントがロードされたときに実行される関数です。このイベント内には、セレクターに一致する任意のタグのクリック イベントに起因する関数があります。

$("#Structure #Toggle")

したがって、ドキュメントがロードされた後、イベントが定義され、タグが存在する限り、セレクターに一致するタグへのクリック イベントにパラメーターとして渡された関数に関連付けられたクリック イベントをリッスンします。

セレクターに 2 つの ID が含まれていることに気付きました。

$("#Structure #Toggle")

これを行う特別な理由がない場合は、

$("#Toggle")

代わりに、ID は一意である必要があるため、Toggle の ID はセレクターに一致するタグを識別します。可能な限り物事をシンプルにする方が良いです。

また、同じタグを何度も問い合わせると健康に悪いです。

繰り返す代わりに

$("#Structure #Toggle")

何度も何度も次のことを行います。

var structureToggle = $("#Structure #Toggle");

いつでも必要なときに

$("#Structure #Toggle")

後でstructureToggle変数を使用してください。

于 2013-11-01T23:11:04.710 に答える