bPopup在一个页面中打开中心对齐,在另一个页面中左对齐

时间:2013-10-02 09:51:58

标签: jquery iframe position css-position bpopup

我正在使用bPopup插件在两个单独的页面上打开iframe

我写了一个小脚本,用于创建iframe并“弹出”。我的两个页面都引用了相同的脚本(确切的URL等):

jQuery('#student_iframe_container').css({
      'display': 'none'
});

jQuery('body').on("click", ".student_iframe_popup", function() {
      jQuery('#student_iframe_container').remove();

      var popUpHTML = '<div id="student_iframe_container"><div class="b-close"><img src="/user/74/187888.png" title="Close" /></div><iframe></iframe></div>';
      jQuery('body').append(popUpHTML);

      jQuery('.b-close').css({
            'background-color': 'none',
            'padding': '8px',
            'font-size': '14px',
            'font-weight': 'bold',
            'width': '52px',
            'text-align': 'center',
            'cursor': 'pointer',
            'overflow' : 'auto'
      });

      jQuery('iframe').css({
            'margin': '0px auto',
            'background-color': 'none',
            'border': 'none'
      });

    var student_id = 'student_' + jQuery(this).attr("id");

    jQuery('iframe').attr("width", 800);
    jQuery('iframe').attr("height", 670);
    jQuery('iframe').attr("id", student_id);
    jQuery('iframe').attr("src", '/index.phtml?d=825090');

    jQuery('#student_iframe_container').bPopup({
            position: ['auto', 2]
      });
});

这个脚本的想法是我可以将<a href="javascript:void(0);" class="student_iframe_popup" id="123456">student</a>打入我的页面,脚本将完成其余的工作。

在我的两个页面上,弹出式窗口iframe都能正常工作。问题在于对齐:在一个页面上iframe正确地显示为水平居中对齐但在另一页上它显示为左对齐。

分配标志页面上的正确对齐方式 Correct alignment

My Flags 页面上的对齐方式不正确 Incorrect alignment

如果我在FireBug中查看HTML,那就相当混乱了:

分配标志

<div class="b-modal __b-popup1__" style="background-color: rgb(0, 0, 0); position: fixed; top: 0px; right: 0px; bottom: 0px; left: 0px; opacity: 0.7; z-index: 9998; cursor: pointer;"></div>
<div id="student_iframe_container" style="left: 48.5px; position: absolute; top: 2px; z-index: 9999; opacity: 1; display: block;">
    <div class="b-close" style="padding: 8px; font-size: 14px; font-weight: bold; width: 52px; text-align: center; cursor: pointer; overflow: auto;">
        <img title="Close" src="/user/74/187888.png">
    </div>
    <iframe width="800" height="670" style="margin: 0px auto; border: medium none;" id="student_138871" src="/index.phtml?d=825090"></iframe>
</div>

此段HTML中使用了student_iframe_popup类:

<li>
    <a id="138929" class="student_iframe_popup" href="javascript:void(0);">Student Name</a>
    <div>23<img alt="Red Flags" src="/user/74/187894.png">&nbsp;0<img alt="Interventions" src="/user/74/187895.png"></div>
</li>

我的标志

<div class="b-modal __b-popup1__" style="background-color: rgb(0, 0, 0); position: fixed; top: 0px; right: 0px; bottom: 0px; left: 0px; opacity: 0.7; z-index: 9998; cursor: pointer;"></div>
<div id="student_iframe_container" style="left: 0px; position: absolute; top: 2px; z-index: 9999; opacity: 1;">
    <div class="b-close" style="padding: 8px; font-size: 14px; font-weight: bold; width: 52px; text-align: center; cursor: pointer; overflow: auto;">
        <img title="Close" src="/user/74/187888.png">
    </div>
    <iframe width="800" height="670" style="margin: 0px auto; border: medium none;" id="student_138978" src="/index.phtml?d=825090"></iframe>
</div>

此段HTML中使用了student_iframe_popup类:

<tr class="open">
    <td class="student">
        <a id="138978" class="student_iframe_popup" href="javascript:void(0);">Student Name</a>
    </td>
    <td>2nd Oct 2013</td>
    <td>10:24am</td>
    <td>IT Misuse</td>
    <td>Behaviour Unit</td>
    <td>Registration</td>
    <td>Referred to tutor</td>
    <td id="1994"><select><option value="O">Pending</option><option value="C">Completed</option></select></td>
    <td rowspan="2" class="centre"><img title="Notify administrator of mistake made on Flag given to Joshua Nichol?" src="/user/74/187888.png" id="1994"></td>
</tr>

相关CSS:

#container table { width: 100%; }
#container table img { width: 16px; }
#container th { text-align: left; border-bottom: 2px solid #999; padding-bottom: 2px; text-transform: uppercase; font-weight: normal; font-size: 10px; }
#container tr.open { background-color: #ffd6d6; }
#container tr.no_action { background-color: #ffead6; }
#container td { padding: 8px 0 4px 0; font-size: 12px; }
#container tr.border td {  border-bottom: 1px solid #999; padding: 4px 0 8px 0; font-size: 11px; }
.student { font-weight: bold; padding-left: 5px; }

显然,这些差异存在差异:

右...

<div id="student_iframe_container" style="left: 48.5px; position: absolute; top: 2px; z-index: 9999; opacity: 1; display: block;">

...误

<div id="student_iframe_container" style="left: 0px; position: absolute; top: 2px; z-index: 9999; opacity: 1;">

然而,写这些风格不是我 - 它是bPopup。我的网页都没有任何与bPopup相关的CSS样式;我正在改变的唯一一个是本文顶部JavaScript文件中的那些。

有没有人知道为什么bPopup决定在一个页面上left:0px而在另一个页面上left:48.5px

2 个答案:

答案 0 :(得分:3)

尝试在javascript中为div添加宽度:

var popUpHTML = '<div id="student_iframe_container" style="width:800px"><div class="b-close"><img src="/user/74/187888.png" title="Close" /></div><iframe></iframe></div>';

(当然你可以为该div使用一个类。使用div中的样式只是一个快速测试。)

在bPopup中,获取水平位置的代码是

hPos = fixedHPos ? o.position[0] : (wW - $popup.outerWidth(true)) / 2

你的wW(窗口宽度)大约等于你的弹出窗口宽度。如果你在div中设置弹出宽度,我认为它会修复它。

答案 1 :(得分:2)

好的,现在已经很晚了,但我已经开始研究这个了。

我已经设法在jsFiddle中粗略地获取HTML,jQuery和CSS。它不漂亮!

请注意,在我的小提琴中,我添加了:

style="position:absolute;"
在“popUpHTML”变量中。当你点击“学生名”时,弹出会集中呈现,我认为这是你想要的吗?

如果不这样做,我发现bPopup很奇怪(bPopup的一个潜在错误?),虽然我不完全确定我所看到的是你遇到的问题。如果删除我添加到popUpHTML字符串的样式并按下链接,弹出窗口将被绘制到屏幕的左侧。但是如果你随后调整jsfiddle中的视口(即右下方窗格),popUp的位置会发生变化,因为这似乎会触发bPopup的位置计算。

因此,要解决您的问题,您需要在student_iframe_container div中明确设置位置样式,并通过“popUpHTML”呈现。