jQuery UI Stars Plugin未在.load回调中加载

时间:2012-02-21 20:57:57

标签: jquery asp.net plugins rating

我是jQuery的新手,无法确定为什么这个插件在回调的上下文中不存在。我有一个带有母版页的asp.net页面。

以下是主人头部的代码:

<!-- jquery ui css -->
<link href="/css/jquery-ui-1.8.17.custom.css" rel="stylesheet" type="text/css"/>
<link href="/css/master.css" rel="stylesheet" type="text/css"/>    

<!-- jquery -->
<script type="text/javascript" language="javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<!-- jquery ui -->
<script type="text/javascript" language="javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.16/jquery-ui.min.js"></script>  
<!-- custom menu code -->
<script type="text/javascript" language="javascript" src="/js/fg.menu.js"></script>   
<!-- stars -->
<script type="text/javascript" language="javascript" src="/js/jquery.ui.stars.js"></script> 
<script type="text/javascript" language="javascript" src="/js/master.js"></script> 

<asp:ContentPlaceHolder id="outerHead" runat="server" />

然后,在default.aspx页面中,我使用jQuery.load()进行了一些嵌套回调,如下所示:

$(document).ready(function () {

            if (jQuery().stars) {
                alert('LOADED');// IS LOADED HERE
            } else {
                alert('NOT LOADED');
            }

            // load top products
            $("#topProducts").html(ajaxLoaderBar).load("/topproducts.aspx?count=3 #main", function () {

                if (jQuery().stars) {
                    alert('LOADED'); // IS LOADED HERE
                } else {
                    alert('NOT LOADED');
                }

                // setup rating history
                $(".showRatingHistory", $("#topProducts")[0]).click(function () {

                    if (jQuery().stars) {
                        alert('LOADED');
                    } else {
                        alert('NOT LOADED'); // IS NOT LOADED HERE
                    }

                    $(this).hide();
                    var vendor = $(this).parents(".rpt-container").find("#vendorName").html();
                    $(this).next().html(ajaxLoaderBar).load("/ratinghistory.aspx?showThumbnails=false&vendor=" + vendor + " #main", function () {
                        $('.editRatingLink').click(function () {
                            if (jQuery().stars) {
                                alert('LOADED');
                            } else {
                                alert('NOT LOADED');  // IS NOT LOADED HERE
                            }

                            // load dialog

                        });
                    }).css("overflow-y", "scroll").css("border", "1px solid #eee");
                });

                // Create stars from :radio boxes
                $(".stars", $("#topProducts")[0]).stars({
                    cancelShow: false,
                    split: 2,
                    callback: function (ui, type, value) {
                    }
                });
            });
        });

注释显示页面指示jQuery()。stars的定义。我不明白如何确定我试图使用的'明星'插件的范围(http://orkans-tmp.22web.net/star_rating/),以及为什么它似乎在外部负载的回调中工作但不是内心的。救命啊!

*的 EDITED *

所以我开发了一种方法来完成这项工作。我不清楚为什么jquery stars ui插件似乎不存在于内部.load回调中,但是我能够通过注入以下代码来强制插件加载来解决问题:

替换

    if (jQuery().stars) {
        alert('LOADED');
    } else {
        alert('NOT LOADED'); // IS NOT LOADED HERE
    }

在我的问题中:

    // ensure the stars plugin is available
    if (!jQuery().stars) {
        $.getScript('/js/jquery.ui.stars.js')
    };

这样,如果插件不可用,它将在当前的.load回调上下文中加载它。适合我,但我仍然不明白如何确定插件的范围。谢谢!

EDITED 的 我修改了原始代码,以表明我只加载子页面中的#main div

* 再次编辑 *

好的,这让我疯了...... 24小时后我把它蒸馏了......

一些jQuery大师可以向我解释原因:

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

            // load top products
            $("#topProducts").html(ajaxLoaderBar).load("/topproducts.aspx?count=3 #main", function () {

                // EXISTS HERE
                console.log(jQuery().stars);  // Firebug displays: function()            

                $(".showRatingHistory", $("#topProducts")[0]).on("click", function (event) {

                    // DOES NOT EXISTS
                    console.log(jQuery().stars); // Firebug display: undefined

这与我试图使用的jquery ui widget插件的范围有关,但我不太明白...

0 个答案:

没有答案