2012-04-09 7 views
0

jqueryで機能しないボタンがあります。ボタンは、jsonオブジェクトを使用してphpからJqueryに渡されます。私は他のすべてのコードをテストし、これを解決するためにテストするボタンだけを削除しました。 私は同じリンクを作成し、PHPの私のページに配置します。リンクがクリックされると、アラートが表示され、機能します。PHPから返されたJQueryのリンクボタンは機能しませんが、そうでない場合は機能します

同じボタンに同じボタンのボタンが追加されていますが、このボタンはPHPからjson経由でJqueryに返され、 がdivに追加されています。このリンク/ボタンは機能しませんか?どうしてこれなの?どちらも同じように見える!

ボタンはPHP

//Jquery basic test button for functionality (works if link button is already on HTML page) 
    $("[href='#test']").click(function() {  
    alert("has been clicked"); 
    }); 

//JQuery extract of my code 

var content; 
$.each(data, function(i, item) { 
content += item; 

}); 
$(content).appendTo('#theframe'); 
},'json'); 

から返さ

誰かがここに

を何が起こっているかのよう助言することを願って感謝も

$.each(data, function(i, item) { 
content += item; 

}); 
$('#theframe').html(content); 
},'json'); 




//php returned 
$json[] = '<a href="#test">View Post</a>'; 
echo json_encode($json); 

//php button on page 
<a href="#test">View Post</a> 

おかげ

を試してみました

すべての投稿の助けを借りて、ありがとう! @Anthonyの例では、フレームを追加しました $( '#theframe')on( 'クリック'、 '[href = "#テスト"]'、関数(e){ アラート( 'をクリックしました); }) ;

+0

感謝の気持ちをお寄せいただきありがとうございました。 @Anthony私はあなたの例を使用して偉大なおかげで – Alan

答えて

1

.click()機能はのみにイベントハンドラを追加します後で動的に追加される要素には影響しません。これを回避する最も簡単な解決策は、.on()(jQuery 1.7+)または.delegate()(1.7より前)のいずれかの機能を使用してイベント委任を設定することです。 .on()例は次のようになります。

$('body').on('click', '[href="#test"]', function(e) { 
    alert('has been clicked'); 
}); 
+0

私は多くを学んだ説明のための応答、感謝を投稿した誰もありがとう;)ありがとう。@Anthony私はあなたの例を使用しました。ありがとうございました – Alan

3

jQuery on()またはdelegate()関数を使用して、クリックイベントを動的に追加された新しいページ要素(ページのロード後)に追加する必要があります。

あなたは()で使用する必要がありますjQueryの1.7以降を使用している場合:http://api.jquery.com/on/

デリゲートを使用するのjQueryの古いバージョンを使用している場合:http://api.jquery.com/delegate/

+0

あなたの助けをありがとうErikk – Alan

1

それが動作しない理由は、ドキュメントレディ機能は一度だけ発生させていることです。これは、2番目のボタンがajax経由でロードされた後に、イベントハンドラがアタッチされていないことを意味します。

または "ライブ" "に" 使ってみてください:

$("body").on("click", a[href="#target"], function(event){ 
alert("has been clicked"); 
}); 

http://api.jquery.com/on/ < -

http://api.jquery.com/ < "オン" のためのドキュメント - あなたの新しいお気に入りのウェブサイト!

希望すると便利です。

+0

'.on()'構文は、既に持っているものと同等です。イベント委譲構文を使用する必要があります。また、 '.live()'は廃止されました。jQueryのバージョンを使用していない限り、それを使用する理由はありません。古いので、イベントには '.delegate()'がありません。 –

+0

@AnthonyGristはそれを指摘してくれてありがとう!今編集されました:) – Andbdrew

+0

ありがとうございましたAndbdrew – Alan

関連する問題