【问题标题】:Fancybox only works after second clickFancybox 仅在第二次单击后才有效
【发布时间】:2014-08-06 13:52:47
【问题描述】:

所以我有一个表格,其中每个单元格都是游戏的名称,当您单击它时,它需要在花式框中显示单击单元格的用户的结果(我使用表格索引来获取 GameID 和会话变量来获取用户 ID),它将用于从第二个 PHP 页面加载结果。

如果我第一次单击一个单元格,fancybox 将不会显示任何内容,并且在我关闭 fancybox 并再次单击任何单元格后,它可以正常工作。我做错了吗?

这是整个 javascript:

$(".jogos").fancybox({
        'hideOnContentClick': true,       
        'onComplete':function(element)
        {

            var gameIdx = $(element).index();
            var cateIdx  = $(element).parent().parent().index();
            var gameIdxPHP;
            var catIdxPHP;
            var gameID;
            var userId = '<?php echo $_SESSION['userID']; ?>'

            <?php 
                for ($i=1; $i<= count($categoryArray);$i++)
                {
                    for ($j=1; $j<=count($categoryArray[$i-1]->gamelist);$j++)
                    {
                        ?>
                        catIdxPHP = '<?php echo $i ?>' -1;
                        gameIdxPHP = '<?php echo $j ?>' -1;

                        if (catIdxPHP == cateIdx && gameIdxPHP == gameIdx)
                        {
                            gameID = '<?php echo $categoryArray[$i-1]->gamelist[$j-1]->GameID; ?>';
                            $("#graphic").load("backoffice/resUserNivel2short.php", {userId:userId,gameID:gameID}, function(){ });
                        }

                        <?php
                    }
                }
            ?>


        }
    });

HTML

<div style="display:none">
    <div id="data">
        <div id="graphic">
        </div>  
    </div>
</div>

链接示例代码

<a href="#data" class="jogos" id="cat<?php echo $i; ?>jogo<?php echo $j; ?>" >

【问题讨论】:

  • 单元格的点击事件在哪里?发布整个js。是点击处理程序中的fancebox脚本吗?
  • 没有点击事件。它是一个
  • 哦,对了,然后发布您的 html 标记
  • 您确定您的文档就绪功能中有 .fancybox 代码吗?
  • 内部文件已准备就绪。我注意到如果我添加:'onCleanup':function(element) { $("#graphic").html(""); } 到我的fancybox,它永远不会显示图形,只有一个空白的fancybox

标签: php jquery fancybox


【解决方案1】:

您的fancybox 的父级上有display:none,因此不会显示图形。

如果您最初使用 display:none,则 Grafic 元素尚未在 dom 中。尝试使用 clip: rect 作为一个类,并使用 fancybox 回调添加/删除该类。

试试这个代码:

$('.jogos').fancybox({
        'onStart': function() {
            $("#data").removeClass('hidden');
        },
        'onClosed': function() {
            $("#data").addClass('hidden');
        }
});

CSS:

.hidden { 
  clip: rect(1px 1px 1px 1px);
  position: absolute;
)}

HTML:

<div>
  <div id="data" class="hidden">
    <div id="graphic">
    </div>  
  </div>
</div>

【讨论】:

  • 我刚试过。没有变化,一切都一样。第一次空白fancybox,第二次工作正常。看到我之前的回答了吗?如果我加载文本而不是 highcharts 图形,它会在第一次尝试时起作用。有没有办法重新加载/强制更新fancybox?
  • 我有点解决了,我在 $('#graphic') div 中添加了一个假图形,现在它在第一次尝试时显示,尽管它没有位于屏幕中心,但我可以解决那个。感谢您的帮助
  • 使用内联 php 是一种非常糟糕的做法。您应该在 javascript 之外为每个单元格提供所需的数据。就像 cell1 有 game1 一样,您可以在 html 标记中添加 data-game-id="1" 。您可以使用 $(this).data('game-id') 访问该数据属性
  • 如果使用数据变量,用户看不到ID?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-30
  • 2015-10-17
  • 1970-01-01
相关资源
最近更新 更多