web-dev-qa-db-ja.com

Bootstrapモーダルダイアログ、show.bs.modalイベントrelatedTargetは未定義です。クリックされた要素を取得するにはどうすればよいですか?

ボタンで呼び出されるモーダルダイアログ:ボタンがクリックされると、イベントが発生し、結果のイベント参照e.relatedTargetは未定義です。それでは、ハンドラから呼び出しボタンを取得するにはどうすればよいですか? eには呼び出しボタンへの参照が含まれていないようです。

<!-- Button trigger modal -->
<button class="btn btn-primary btn-lg" data-toggle="modal" data-target="#myModal">
  Launch demo modal
</button>

<!-- Modal -->
<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
  <div class="modal-dialog">
    <div class="modal-content">
      <div class="modal-header">
        <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
        <h4 class="modal-title" id="myModalLabel">Modal title</h4>
      </div>
      <div class="modal-body">
        ...
      </div>
      <div class="modal-footer">
        <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
        <button type="button" class="btn btn-primary">Save changes</button>
      </div>
    </div>
  </div>
</div>

jQuery:

$('#myModal').on('show.bs.modal', function (e) {
  console.log(e.relatedTarget) // do something...
})

リファレンス: http://getbootstrap.com/javascript/#modals

22
eyn

次の Bootplyの例 を見てください。

実行すると、showイベントにe.relatedTargetへの適切な参照が含まれているようです。

$('#myModal').on('show.bs.modal', function (e) {
    var button = e.relatedTarget;
    if (button != null)
    {
        alert("Launch Button ID='" + button.id + "'");
    }
})

Bootplyの例 を見て、独自のコードがそれから逸脱しているかどうかを確認してください。 (元のBootstrap=サンプルコードスニペットを、指定した link から直接コピーしました。)

これがお役に立てば幸いです。がんばろう。

19
László Koller

Geo1004に感謝します。モーダルで「show」イベントをトリガーするためにすでにJSを使用していましたが、2番目の引数がありませんでした。したがって、event.relatedTargetは未定義でした。

他の誰かが(データ属性を使用する代わりに)JSルートを使用している場合、ボタンをjQueryオブジェクトとして送信していることを確認します-

$( "#myModal" ).modal( "show", $( "#buttonBeingClicked" ) );
14
JDev518

これは回避策です。代わりにJSでモーダルを開くと、relatedTargetが設定されます。 'modal'メソッドの2番目のパラメーターとしてボタンを渡すのをお見逃しなく。

データ参照(ここではaddress-target)を渡すことができます

$('.listing_btn').on 'click', ->
  $('.modal').modal('show', $(@))

$('#modal').on 'show.bs.modal', (event)->
   button = $(event.relatedTarget)
   address_id = button.data('address-target')
   console.log address_id 
9
geo1004

私は同じ問題を抱えていて、それを修正するために夜全体を無駄にしました。私のbootstrap.jsバージョンは単に古く、$(event.relatedTarget)は 'show.bs.modal'イベントでは利用できませんでした。同じ問題を抱えている人は、最初に彼のbootstrapバージョンを確認する必要があります。次に、公式サイトの例に固執します。 http://getbootstrap.com/javascript/#modals-related-target 参照は$(event.relatedTarget)にあります。

4
Hector
$('#myModal').on('show.bs.modal', function (e) {
   console.log($(e.relatedTarget)); // You will get the element you want! Cheers
})
2
Akshay Bajpei