ポップフォームとしてjqueryfancybox1.3.4を使用しています。
しかし、fancyboxは動的に追加された要素にバインドできないことがわかりました。たとえば、現在のドキュメントにhtml要素を追加する場合です。
このように:最初に要素をbody usejqueryに追加します。
$(document.body).append("<a href="home/index" class="fancybox"/>");
そして私はfancyboxと呼んでいます
$(".ajaxFancyBox").fancybox({padding: 0});
ただし、fancyboxは動的に追加された要素では機能しません。
この要素からfancyboxを呼び出すことはできませんか?
Fancybox(v1.3.x)を動的に追加された要素にバインドする最も簡単な方法は次のとおりです。
1:jQuery v1.7.xにアップグレードします(まだアップグレードしていない場合)
2: jQuery API on()
+ focusin
イベントを使用してスクリプトを設定します。
それを機能させるには、上記のコードに従って_class="ajaxFancyBox"
_で要素のparent
要素を見つける必要があります(または必要に応じてparent
のparent
を見つける必要がありますit)そしてjQuery on()
をそれに添付します。
_<div id="container">
<a class="ajaxFancyBox" href="image01.jpg">open image 01</a>
<a class="ajaxFancyBox" href="image02.jpg">open image 02</a>
</div>
_
..上記の例のように、on()
およびfocusin
イベントを_id="container"
_(parent
)の要素に適用します。
_$("#container").on("focusin", function(){
$("a.ajaxFancyBox").fancybox({
// fancybox API options here
'padding': 0
}); // fancybox
}); // on
_
必要に応じて、任意のfancyboxオプションを適用できます。さらに、次のように、コンテンツのタイプごとに(on()
メソッド内に)異なるスクリプトがある場合があります。
_$("#container").on("focusin", function(){
$("a.ajaxFancyBox").fancybox({
// fancybox API options here
'padding': 0
}); // fancybox
$("a.iframeFancyBox").fancybox({
// fancybox API options here
'padding': 0,
'width': 640,
'height': 320,
'type': 'iframe'
}); // fancybox
}); // on
_
[〜#〜]重要[〜#〜]:上記の例はChromeではそのようには機能しません。 回避策は、fancyboxにバインドされているすべての要素にtabindex
属性を追加することです。
_<div id="container">
<a tabindex="1" class="ajaxFancyBox" href="image01.jpg">open image 01</a>
<a tabindex="1" class="ajaxFancyBox" href="image02.jpg">open image 02</a>
</div>
_
これは問題を解決し、IE7 +を含むほとんどのブラウザで(私が知る限り)機能します。
更新:2012年3月7日
この方法は、ページに新しいコンテンツを追加した場合にのみ機能し、ページのコンテンツを置き換えた場合には機能しないと言われました。
この方法は、実際には上記の2つのシナリオのいずれかで機能します。 .on()
メソッドを適用したコンテナ内にも新しい置換コンテンツがロードされていることを確認してください。
Chromeのtabindex
回避策も適用されます。
間違ったクラス名を指定しているので、代わりにこれを試してください。
$(".fancybox").fancybox({padding: 0});
あなたは多分このような何かを試すことができます:
$(document.body).append("<a href='home/index' class='fancybox' onclick='showFancybox()'/>");
次に、Fancyboxを作成して表示する関数を作成します。
function showFancybox(){
$.fancybox(
'<h2>Hi!</h2><p>Content of popup</p>',
{
'autoDimensions' : false,
'width' : 350,
'height' : 'auto',
'transitionIn' : 'none',
'transitionOut' : 'none'
}
);
}
上記のコメントで示唆されているように、この種の問題では次のアプローチを使用できます(要素を動的要素にバインドする)-
$("#container").on("focusin", function(){
if($(this).hasClass("fancybox-bind")){ //check if custom class exist
return 0; //now fancybox event will not be binded
}else{ //add class to container
$(this).addClass("fancybox-bind");
}
$("a.ajaxFancyBox").fancybox({ // fancybox API options here
'padding': 0
}); // fancybox
$("a.iframeFancyBox").fancybox({ // fancybox API options here
'padding': 0,
'width': 640,
'height': 320,
'type': 'iframe'
}); // fancybox
}); // on