0

私にはこの(function TCC() {...})();問題がありますが、要するに、要素の2つのセクションを生成する自己呼び出し関数があります。これらの要素は、クラスで生成されbtnます。$('.btn').click(function () {...};[適切なconsole.log()を使用する]の別のJQuery関数はbtn、前述の2つのセクションの要素を除いて、クラスのあるページ上のすべての要素がクリックされていることを示しています。

1つのコメントは、「「列ボタンジェネレータ」ループの前にクリックイベントをバインドするために問題が発生する」ことを示唆しており、次の解決策を提案しています。

$.each(cols, function(i) {...}).done(function(){ //Add click event handler now });

最初の質問は、「列ボタンジェネレータ」ループの前にクリックイベントをバインドするため、誰かが詳しく説明できるかどうかです。

2番目の質問は、提案されたソリューションについてです。生成用に2行の別々のコードがあり、ブロックが50行を超えているので、メソッドでこれが必要$('btn').on('click', function() {...});になると想定しているので、コード行を複製せずにソリューションを実装するにはどうすればよいですか。.done()問題のページはこちらです。

  • に関連する生成コードの現在のスコープ構造は次の.on('click')とおりです(picは申し訳ありませんが、StackOverflowは何らかの理由でフォーマットが気に入らなかった):

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

コードの生成行の範囲はこれに影響しますか?もしそうなら、提案が述べた「クリックイベントへのバインド」を修正するために自己呼び出し関数からそれらを引き出すことができますか?

プログラミングをゼロから学ぶため、これらのタイプの構造レッスンは、教科書に含まれていることが多いオンライン学習ツールから除外されることが多いため、皆様のご協力と専門知識に感謝いたします。

4

1 に答える 1

3

あなたは本当に実際のコードを投稿するべきでした。しかし、関係ありません。clickイベントが呼び出されない唯一の問題は、間違った構文を使用したことだと思います。

jQueryのon関数の構文は次のとおりです-

HTML

<div class='button_container'>
    <button> This is a button</button>
    <button> This is a button</button>
</div>

JavaScript

$('.button_container').on('click', 'button', function(){
    console.log('I have been clicked!');
});
//Note the the second selector 'button' within the declaration

関数は基本的にand関数をon置き換えるため、ハンドラーは、いつどのように作成されたか(動的に作成されたことを意味します)に関係なく、のすべてのボタンに対して定義されるようになりました。これは少し誤解を招く可能性があります。livedelegatediv.buttons

単純な選択を行う場合

$('button').on('click', function(){ /* do something **/ })

jQueryは、直接イベントバインディングについて話していることを前提としています。つまり、dom要素はすでにロードされています。動的に作成された要素には影響しません(作成コードの後に​​バインディングをアタッチした場合でも、それらの要素はDOMに既に存在するため、引き続き機能します)。

2番目のセレクターを指定しない限り、これはデフォルトの動作です。これは少し紛らわしいですが、先に進みます。実際に作成する前にこれらの要素をターゲットにしたい場合は、この種の何かを実行してください

//Right syntax
$(document).on('click','button', function(){ /* do something **/ })
//This will bind to all buttons
于 2012-08-01T10:02:05.690 に答える