如何设置jQuery以在锚点击上启动PrettyPhoto

时间:2012-03-28 04:17:56

标签: jquery jquery-plugins

我一直在使用PrettyPhoto来设置一个简单的图库。我的问题是,我不了解如何从开发人员site提供的文档中实现API。当我按照我的理解添加代码并单击锚点时,没有任何反应。

我有一个Site.Master页面和一个使用该插件的内容页面。这是我在内容页面中的代码:

<asp:Content ID="HeadContent" runat="server" ContentPlaceHolderID="HeadContent">
    <title>Gallery</title>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />       
    <script type="text/javascript">
        $('#prettyPhoto').click(function () {
            api_images = ['images/prettyPhoto/dogs.png', 'images/prettyPhoto/Yard1.png', 'images/prettyPhoto/Yard2.png', 'images/prettyPhoto/Yard3.png'];
            api_titles = ['Title Dogs', 'Title Yard 1', 'Title Yard 2', 'Title Yard 3'];
            api_descriptions = ['Dogs', 'Yard 1', 'Yard 2', 'Yard 3'];
            $.prettyPhoto.open(api_images, api_titles, api_descriptions);
        });
    </script>
</asp:Content>

...

<a href="#" id="prettyPhoto"><img src='images/prettyPhoto/dogs.png' alt='Dogs' style="float:right; margin:0px 0px 10px 10px" /></a>

这是Site.Master的内容:

<head id="Head1" runat="server">
    <link rel="stylesheet" href="Styles/styles.css" type="text/css" />
    <link rel="stylesheet" href="styles/prettyPhoto.css" type="text/css" media="screen" charset="utf-8" />
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.5/jquery.min.js"></script>
    <script type="text/javascript" src="Scripts/jquery.cycle.all.latest.js"></script>  
    <script type="text/javascript" src="Scripts/jquery.prettyPhoto.js" charset="utf-8"></script>      
    <script type="text/javascript">
        $(document).ready(function () {
            $('.newWindow').click(function (event) {
                var url = $(this).attr("href");
                var windowName = $(this).attr("name");
                var windowSize = windowSizeArray[$(this).attr("rel")];
                window.open(url, windowName, windowSize);
                event.preventDefault();
            });            
            $('.slideshow').cycle();            
            if ($("#content").height() > $("#sidebar").height()) {
                $("#sidebar").height($("#content").height());
            }
            else {
                $("#content").height($("#sidebar").height());
            }
        });
    </script>
    <asp:ContentPlaceHolder ID="HeadContent" runat="server">
    </asp:ContentPlaceHolder>
</head>

我希望我不会在这里发布太多信息,但我不清楚我的错误在哪里。而且我知道我犯了一个错误,因为今晚早些时候我有这种控制按照我想要的方式工作,但后来我不得不开始“微调”它。在我知道之前,我已经忘记了我的变化并将其打破了。

1 个答案:

答案 0 :(得分:2)

好的,我发现了错误,我会发布答案以防其他人可以使用它。我发现开发人员网站上的文档缺乏解释实现API的一些细节,但也许这些细节对于具有更多jQuery经验的人来说是显而易见的。我犯了两个错误。首先,click处理程序需要在$(document).ready函数内部。其次,需要在单击处理程序中声明API调用之前调用插件。这是让我感到困惑的部分;我原本认为API否定了调用插件的需要,但我的jQuery体验再次受到限制。这是最终的代码:

<script type="text/javascript" src="Scripts/jquery.prettyPhoto.js" charset="utf-8"></script>
<script type="text/javascript">
    $(document).ready(function () {
        $().prettyPhoto();
        $('#prettyPhoto').click(function () {
            api_images = ['images/prettyPhoto/dogs.png', 'images/prettyPhoto/Yard1.png', 'images/prettyPhoto/Yard2.png', 'images/prettyPhoto/Yard3.png'];
            api_titles = ['Title Dogs', 'Title Yard 1', 'Title Yard 2', 'Title Yard 3'];
            api_descriptions = ['Dogs', 'Yard 1', 'Yard 2', 'Yard 3'];
            $.prettyPhoto.open(api_images, api_titles, api_descriptions);
        });
    });
</script>

在这样做的过程中,我了解到上述代码可以放在Site.Master或内容文件中,而且几乎可以放在这些文件的任何位置。解决这个问题也帮助我完成了我的另一个想法,即从外部XML文件中动态生成整个代码块。