显示包含HTML内容的模态窗口

时间:2013-06-23 18:10:39

标签: javascript jquery html css modal-dialog

我正在开发一个小型网站(刚刚开始使用Zurb Foundation)并制作了一个基本的网格布局,其中包含大型都市风格的div缩略图(页面上有~10个缩略图)。

我希望为用户添加此处的交互,即当用户点击任何这些缩略图时,会显示一个模态窗口,显示有关所点击的特定项目的更多信息。 (有点类似于我们大量可用的图片库灯箱插件)

但是,我想知道从以下两个方面实现相同目标的更好方法是什么。我的模态弹出对话框的内容是否应该在一个单独的html中,我应该在用户点击时通过ajax获取它们?
或者我应该隐藏这些部分并在用户点击时显示它们? 每个部分类似于项目名称,点击它显示项目描述(不同的项目可能有视频,图像,描述等。)

无论上面哪种更好的方法,最好查看一个关于如何显示模态弹出窗口的示例(考虑到它应该是最好可以应用于所有缩略图而不是做的事情)为每个缩略图分隔各个处理程序)

2 个答案:

答案 0 :(得分:0)

最好的方法是将这些对话放在一个单独的文件中,并在用户点击某些内容时通过ajax加载它们。这将使事情更容易管理,他们将更有条理。

如果您将html存储在隐藏的div中,可能会浪费资源,因为用户不会在该页面加载中使用所有对话框。您可能还很难保持代码是最新的,因为您必须在隐藏的div部分更新它,然后在外部文件部分中更新它(如果您同时使用它们)。

我的建议是在php类/函数中使用所有html(或使用php MVC框架)并在需要使用它时从那里加载它。这样,您只需要从一个位置更新它以在整个站点上进行更改。对于AJAX加载,以JSON格式加载html,然后您可以在JSON中添加其他变量(这将使代码更有条理),例如外部脚本和CSS文件以及状态指示器。

答案 1 :(得分:0)

这是一个独立的例子。运行后,请注意以下事项:

  • <head>标记
  • 中加载jQuery / jQueryUI库
  • 确定点击了哪个图像:(1)每次点击img类的元素时触发点击事件,(2)通过jQuery获取该特定img的ID
  • 使用AJAX将该图像ID发送到PHP处理器文件
  • PHP处理器文件做了一些事情,然后发回结果
  • PHP的结果在AJAX成功函数中收到使用收到的数据(来自PHP)的所有处理必须发生在success函数内,包括调用JQUI dlg
  • JQUI dlg在TEST.PHP中以空DIV开头,在AJAX成功函数中填充了标记:$('#dlgID').html(data_received_from_PHP);
  • 请记住在单击按钮确定时关闭JQUI dlg(否则您可以将该命令放在JQUI dlg的close:部分中)

要运行这个简单示例,您需要两个文件:

文件1:TEST.PHP

<html>
    <head>
        <script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
        <script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.10.3/jquery-ui.min.js"></script>
        <link rel="stylesheet" href="http://code.jquery.com/ui/1.10.3/themes/smoothness/jquery-ui.css" />

        <style>
        </style>

        <script type="text/javascript">
            $(document).ready(function() {

                $('.img').click(function() {
                    var iid = $(this).attr('id');
                    //alert('You clicked ID: ' + iid);
                    $.ajax({
                        type: "POST",
                        url: "yogibear.php", // "source.php",
                        data: "iid="+iid,
                        success: function(data) {
                            //alert('AJAX recd: ' +data);
                            $('#moddlg').html(data);
                            $('#moddlg').dialog('open');
                        } //END success fn
                    }); //END $.ajax

                });
                $('#moddlg').dialog({
                    autoOpen: false,
                    modal: true,
                    width: 400, //default is 300
                    title: 'This is yer dialog:',
                    buttons: {
                        'Click Me': function() {
                            $(this).dialog('close');
                        }
                    },
                    close: function() {
                        alert('Dlg is closing... I can do more stuff in here, including running another AJAX call');
                    }
                });

            }); //END $(document).ready()

        </script>
    </head>
<body>

    <img id="i-1" class="img" src="http://placehold.it/140x100" />
    <img id="i-2" class="img" src="http://placehold.it/140x100" />
    <img id="i-3" class="img" src="http://placehold.it/140x100" />
    <img id="i-4" class="img" src="http://placehold.it/140x100" />
    <div id="moddlg"></div>

</body>
</html>

文件2:YOGIBEAR.PHP

<?php
    $x = $_POST['iid'];
    die('PHP file recd: ' . $x);
    //Of course, this is where you receive the img id sent via AJAX
    //and look up stuff in MySQL or etc, then return the results
    //simply by putting it all into a variable and ECHOing that
    //variable. Or, you can use JSON to echo an array - but make
    //sure to look up a couple of examples as you must add another
    //couple of params to the AJAX code block