1
$(function(){

function f1(){}
function f2(){}

}

<Input type = radio Name = radiobutton Value = "something" checked=checked onClick= //here call f1()//>

OnClick で f1 関数にアクセスしようとしています

このようなコードは機能しません:

$.function.f1()
$.function().f1()
4

2 に答える 2

6

これは、次のようにする必要があるためです。

$(function () {

    function foo () { }
    function bar () { }

    // bind
    $('input').on('click', foo);

});

onclick=... HTML マークアップに属性を配置する代わりに。

編集

リクエストに応じて、マークアップの代わりに jQuery バインドを実行する必要がある理由について簡単に説明しますonclick

  1. あなたはすでに単純明快な jQuery を使用しています。これを使って。
  2. HTML、CSS、および JS を分離するために多大な努力を払う必要があります。HTMLファイルのHTML、JSファイルのJS、何とか。HTMLonclick=do_backflips()マークアップを挿入すると、これに違反し、将来的に悪夢のようなメンテナンスの問題が発生する可能性があります。
  3. DOM0onclick=構文は本質的に1:1. つまり、当然のことながら、各要素のイベントごとに、1 つのイベント ハンドラーしかアタッチできません。それは間違いなくボールを吸う。
  4. ハンドラー関数内で関数f1と関数を定義することにより、その関数内でのスコープを制限しています。つまり、スクリプト インタープリターはHTML マークアップの場所を認識できません。ハンドラーが既知の場所にイベントハンドラーをアタッチする必要があり、それは内部にあります(それが理にかなっている場合)。f2document.readyf1document.ready
于 2012-05-17T18:08:51.043 に答える
1

使用のポイントは$( function(){ ... } )、内部が何であれ、DOM のロードが完了した後にのみ実行されることです。名前空間をクリーンに保ち、ローカル スコープで関数を使用することが目的でない限り、そこで関数を定義してもメリットはありません。

この場合、スコープ外の関数が必要なので、無名関数の外に移動するか、イベントをスコープ内のラジオ ボタンにバインドします。

于 2012-05-17T18:05:50.987 に答える