2016-03-21 18 views
0

jQuery ajaxを使用して、ブートストラップモーダルの内容全体を取得しています。ここでJquery:なぜモーダルのボタンにアクセスできないのですか?

$.get('/user/modal', { 
    id : datum.id 
}).done(function (data) { 
    $(data).modal('toggle'); 
    $('#my-btn').click(function() { 
     console.log('Button was clicked!'); 
    }); 
}); 

をAJAX呼び出しによって取得したとして、モーダルhtmlです::ここにはJavaScriptです

<div class="modal fade temp-modal" tabindex="-1"> 
    <div class="modal-dialog modal-sm"> 
     <div class="modal-content"> 
      <div class="modal-body"> 
       <button type="button" id="my-btn">Click Me</button> 
      </div> 
     </div> 
    </div> 
</div> 

問題は、ボタンのクリックハンドラが動作しないということです。どうして?私が何をしても、私はそれを握ることができない!

+0

$( '#my-btn')を宣言することができます(click(function {){ console.log( 'Button was clicked!'); });アヤックスコードの外に –

答えて

1

dataが動的にロードされているとして、あなたはイベント委任する必要があります。これが行われなければならなぜ

$(document).on('click', '#my-btn', function() { 

を?

DOM要素を動的なあなたのケースとしてロードされ要求されたページが見つかりまし要素とAjax経由またはdocument.createElement()などを経由して、動的なあなたとDOMに追加された要素のためのイベント登録を行っていますイベントは、最も近い静的な親イベントまたは常に利用可能なdocumentまたはdocument.bodyイベントに委任する必要があります。

+0

こんにちはジャイ、これはうまくいったが、なぜ私は理解していない。確かに、その時点でその要素がページに存在する限り、いつでも要素にイベントハンドラを追加できます。 –

+0

@KimPrince DOMにデータを追加するのではなく、データがモーダルに変換されただけで、その要素がモーダルとして登録されているため、DOMには存在しないようになりました。 – Jai

+0

ああ!それはジャイです、それは今や理にかなっています。 –

0

documentに含まれていないdataのボタンを検索する必要があると思います。

$.get('/user/modal', { 
    id : datum.id 
}).done(function (data) { 
    $(data).modal('toggle'); 
    $(data).find('#my-btn').click(function() { 
     console.log('Button was clicked!'); 
    }); 
}); 
0

私はあなたのコードを試してみたと私は結果

を取得するために終わった見てください、このfiddle

HTML

<div class="modal fade temp-modal" tabindex="-1"> 
    <div class="modal-dialog modal-sm"> 
     <div class="modal-content"> 
      <div class="modal-body"> 
       <button type="button" id="my-btn">Click Me</button> 
      </div> 
     </div> 
    </div> 
</div> 
jQueryを使って

JS 2.2.2

$.get('/').done(function (data) { 
    //$(data).modal('toggle'); 
    $('#my-btn').click(function() { 
     console.log('Button was clicked!'); 
    }); 
}); 

モーダルを切り替えたい行を非アクティブにすることに注意してください。しかしボタンクリックイベントが発生しました

関連する問題