2

我正在使用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正确显示为水平居中对齐,但在另一页上显示为左对齐。

正确对齐分配标志页面 正确对齐

我的标志上的不正确对齐页面 不正确的对齐

如果我查看 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>

该类student_iframe_popup用于这段 HTML:

<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>

该类student_iframe_popup用于这段 HTML:

<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另一个页面上?

4

2 回答 2

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 中设置弹出宽度,我认为它会修复它。

于 2013-10-10T23:56:43.083 回答
2

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

我已经设法在jsFiddle中粗略地获取了您的 HTML、jQuery 和 CSS 。不漂亮!

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

style="position:absolute;"

在“popUpHTML”变量中。当您单击“学生姓名”时,弹出窗口会集中呈现,这(我认为)是您想要的?

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

因此,为了解决您的问题,您可能需要在通过“popUpHTML”呈现的 student_iframe_container div 中显式设置位置样式。

于 2013-10-11T00:17:03.127 回答