2017-10-24 11 views
1

getData.phpファイルの動的コンテンツをjQueryダイアログに挿入します。今jQuery UIを開くダイアログボックス動的コンテンツを含むダイアログボックスを開き、動的に反応してダイアログ内をクリックします。

<p id="data1" class="data">data1</p> 
<p id="data2" class="data">data2</p> 
<p id="data3" class="data">data3</p> 

私の問題である:

$("#buttonGetData").click(function() { 

    $.get("getData.php", function(data){ 
     $("#dialog").html(data); 
     $("#dialog").dialog(); 
     return false; 
    }); 
}); 

がgetData.phpが戻ったばかりのようなものを与える:それは、これまでに経由して正常に動作します私は、各データ行にダイナミッククリックリスナーを追加するにはどうすればよいので、私私のサイトでクリックされたデータを使用できますか?それぞれの 'p'をクリック可能にして、その内容を 'textarea'に設定するために内部のデータを使用します。

問題は、動的に追加された新しい行がサイトのJSの一部ではないため、clickListenerを使用してそれらにアクセスできないという問題があるようです。

これはどのように正しく行われますか?ありがとうございました!

+0

あなたは、[イベントの委任](https://learn.jquery.com/events/event-delegation/)私は今、この権利に探しています – billyonecan

+0

を使用することができます。それは有望に見えます。私はそれが働くならば、私は戻って報告します。 –

答えて

0

$(取得)を使用したようにAjaxを使用してhtml関連のデータ結果を取得すると、新しく生成されたAjaxのhtmlはjQueryコードに使用できませんまたは他の言葉ではjQuery/JSは新しく追加されたhtml要素はAjaxから生成されます。必要な結果を達成する方法があります。あなたのjQuery/JSコードをHTMLコードでAjaxにあなたのファイル(getData.php)からStringとして送ることができます。あなたのgetData.phpでは、このようにエコーすることができます。

echo '<p id="data1" class="data">data1</p>'; 
echo '<script>'; 
echo "$(document).on('click', '#data1', function(){alert('DATA1 Clicked');});" 
echo '</script>'; 
die(); 

上記は非常に単純な回答かもしれないので、もっと納得のいく別の方法があります。イベントハンドラに基づいて委任を使用することもできます。例:

$("#dialog").on("click","p", function(){ 
    alert("DATA1 Clicked"); 
// your code to add content of this element to textarea 
}); 

$("#dialog").on("click","#data1", function(){ 
    alert("DATA1 Clicked"); 
// your code to add content of this element to textarea 
}); 

$(document).on('click', '#data1', function(){ 
    alert("DATA1 Clicked"); 
// your code to add content of this element to textarea 
}); 

そのうちの1人は問題を解決できるはずです。

+0

私はこのようなものを想定していました。しかし、どのように役立つだろうか?エコー経由で追加するPHPファイルのjavascriptは、メインのhtmlファイルのJSにアクセスできませんでしたか?あなたが "アラート"が好きなようにスタンドアローンを行うのですが、クリックしたデータをAJAX呼び出しが開始されたメインのhtmlファイルに解析する必要があります。たとえば:ボタンをクリックし、ajax呼び出し、データをダイアログに入力します。次に、ユーザーが行xをクリックすると、ページはデータxの内容を持つメインのhtmlページのテキストエリアを埋めます。 –

+0

私は自分の答えを更新しました。それが問題を解決するかどうかチェックしてください。 –

関連する問題