-1

ajax で生成されたセレクターに問題があります。

基本的に、デフォルトの状態でスタートボタンがあります。onclick、それは何かを開始し、クリックすると ajax 呼び出しから新しい div が返され、結果が表示されます。これらの項目の 1 つが停止ボタンです。メイン ページからリンクされたスクリプトには、この停止ボタンに関連付けられたクリック イベントがあります。

<a id="stop">stop</a>

スクリプトをインラインに配置すると、リターンコールでアンカーも出力する自己が呼び出され、次のようにアクセスできます

$('#stop').click(function() {   });

ただし、スクリプトは必要ありません (ページごとに複数のアイテムがあり、リンクされたメインのリソースにスクリプトを配置する方がはるかに理にかなっているため)。この呼び出しがメイン ページからリンクされたシートにある場合、何も起こりません。

どうしてこれなの?

戻り要素に対処するために使用する必要がある別の「ドキュメント対応」ラッパーはありますか?

4

3 に答える 3

2

もしも

<div id="container"></div>

ajax呼び出しの結果を追加する要素です。

あなたがしたい:

$('#container').on('click', '#stop', function() { console.log('test'); });

あるいは、次のようなこともできます

$('#stop').live('click', function(){ console.log('test'); });

liveただし、ページで処理するイベントが多数ある場合は、使用するたびにオーバーヘッドが追加されるため、お勧めしません。

于 2013-02-21T14:49:37.827 に答える
2

あなたの問題についての私の理解は、あなたが作成したクリックイベントは、ajax を介して追加された要素に対しては発生しないということです。ハンドラーを要素のクリック イベントにアタッチすると、これは現在 DOM にある要素に対してのみ発生します。希望する動作を得るには、いくつかのオプションがあります。

1) 非効率的な「ライブ」ハンドラーを使用します。(通常、ミリ秒単位で測定される非効率性)

$('#stop').live('click', function(){});

2) 要素が DOM に挿入された後、イベント ハンドラーを再アタッチします。

$.ajax({
    complete: function(){
        $('#idOfTheElementsYouJustInserted').click(function(){});
    }
});

3) イベント ハンドラーを静的な親要素にアタッチして、ボタンがクリックされるとイベントが「バブル」し、このイベントをトリガーするようにします。バブルを作成した要素を参照するには、event.target を使用できます。ここで、event は関数に渡される既定のパラメーターです。

$('#staticParentElement').click(function(event) { var elementClicked = event.target;   });
于 2013-02-21T14:55:45.040 に答える
-2

メイン スクリプトは、要素が存在する前に実行されたため、新しい要素にイベントを追加していません。

メインスクリプトで関数を作成し、イベントを追加するときに関数を指定するだけで機能しますか?

メインスクリプト

var your_function = function() {
    // your code
}

次に、divを追加すると-

$('#stop').click(your_function());

より良い解決策は、イベントを親に追加し、それがバブルアップしたときにそれを処理するという Brad M の提案です。

于 2013-02-21T14:47:41.300 に答える