2012-07-19 7 views
55

私はモーダルを呼び出すためのa要素持っている:Twitter Bootstrap Modalのinvoker要素を取得するには?

<a class="btn" data-toggle="modal" data-target="#myModal" href="http://some-url" >Launch Modal</a> 

そして、これは私のモーダルであると言う:

<div class="modal hide" id="myModal"> 
    <div class="modal-header"> 
    <button type="button" class="close" data-dismiss="modal">×</button> 
    <h3>Modal header</h3> 
    </div> 
    <div class="modal-body"> 
    <p>One fine body…</p> 
    </div> 
    <div class="modal-footer"> 
    <a href="#" class="btn" data-dismiss="modal">Close</a> 
    <a href="#" class="btn btn-primary">Save changes</a> 
    </div> 
</div> 

私はモーダルによってトリガーされるイベントに関数をバインドすることができます。

$('#myModal').on('hidden', function() { 
    // do something… 
}) 

私の質問は:a要素にアクセスするにはどうすればいいですか?私のイベント加入者機能からモーダルを呼び出しましたか?

+0

'$(" [のhref = '# myModal '] ")'はその 'a'タグを選択します。それはあなたが探しているものですか? – sachleen

+0

いいえ、それは実際にはありません。 #mymodalの代わりに何でもかまいません。私が探しているのは、event.relatedTargetやevent.OriginalTargetなんかのようなものです。 – cnkt

+0

モーダル 'mymodal'を起動するために'#mymodal'する必要はありませんか? "mymodal"はイベントが入っている要素のIDを含む変数に置き換えることができます。 – sachleen

答えて

91

event.relatedTargetのおかげでブートストラップ3.0.0で解決されました。

$('#your-modal').on('show.bs.modal', function (e) { 
    var $invoker = $(e.relatedTarget); 
}); 
+5

と私はモーダルの隠れを呼び出した要素を知りたいのですが? – axel

+0

良い質問アクセル、それはまだそれのために何もないようです。 –

+2

これはブートストラップ2.3で回避できますか? – Ashimema

1

現在、すぐに使用できるわけではありません。ブートストラップ・モーダル・コードを自分で編集したい場合は、機能要求と回避策があります。

here

+1

[pull request](https://github.com/twitter/bootstrap/pull/6256)が送信されましたが、何らかの理由で拒否されました。これは私が非常に見たいと思う機能です。 – Bojangles

1

を参照してください。私はあなたが言ったと同じように、私は「呼び出し」に関連するいくつかのデータをバインドするために持っていた状況がありました。 私はそれを「クリック」イベントを結合し、このようなデータを扱うことによってそれを解決するために管理している:

呼び出し

<img id="element" src="fakepath/icon-add.png" title="add element" data-toggle="modal" data-target="#myModal" class="add"> 

JSを呼び出しに関連するデータをキャッチしますこのよう(ただ、いくつかのコード例)

$('#element').on('click', function() { // Had to use "on" because it was ajax generated content (just an example) 
    var self = $(this); 
}); 

、あなたはとにかくあなたが欲しいあなたの呼び出しに関連するデータを扱うことができます。

16

あなたはに耳を傾ける必要があります:

$('[data-toggle="modal"]').on('click', function() { 
    $($(this).attr('href')).data('trigger', this); 
}); 
$('.modal').on('show.bs.modal', function() { 
    console.log('Modal is triggered by ' + $(this).data('trigger')); 
}); 

あなたはもちろん、彼らは火shown.bs.modalまたは他のイベントとのshow.bs.modalを置き換えることができます。 これはBootstrap 3.0.0用です。 2.3.2を使用している場合は、.bs.modal(私は思う)を取り除く必要があります。

私はこのソリューションについて好き:あなたはこのが誰であるかを覚えておく必要はありません、および他のプロキシが回避策を呼び出すこと自己

もちろん、href属性が実リンク(動的モーダルロードオプション)でないかどうかをテストする必要があります。

+0

私の場合に最適なオプション。そして、2.3.2では.bs.modalを削除する必要があります。 –

+0

驚くほど巧妙な解決策!私はこのソリューションを複数回upvoteできますことを願っています。私の問題は、複数の要素からモーダルがトリガされ、モーダル内のボタンをクリックしたときにトリガ要素が欲しいということでした。従来の 'show.bs.modal'と' event.relatedTarget'を使用する従来のルートは可能ですが、私は不必要な 'unbind()'呼び出しを終了させたり、パフォーマンスを低下させたりします。もう一度乾杯! – Fr0zenFyr

6

モーダル要素が渡されているすべてのオプションを保存しmodalという名前のデータオブジェクトを持っています。モーダルをトリガする要素に「ソース」データ属性を設定し、ソースのIDに設定してから、options変数から後で取得することができます。

トリガは次のようになります、

イベントコールバックで
<a id="launch-modal-1" class="btn" data-toggle="modal" data-target="#myModal" href="http://some-url" data-source="#launch-modal-1">Launch Modal</a> 

modalデータオブジェクトを取得し、sourceオプションを見て:

$('#myModal').on('hidden', function() { 
    var modal = $(this).data('modal'); 
    var $trigger = $(modal.options.source); 
    // $trigger is the #launch-modal-1 jQuery object 
}); 
+2

これは当初私にとってはうまくいくようでしたが、複数のソースがあるとすぐに機能しなくなりました。モーダルは最初に呼び出されたときのオプションを保持しているようです。そのため、最初にクリックしたアンカーは、以降のすべての操作でそのデータソースを使用します。 – izak

関連する問題