我是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插件的范围有关,但我不太明白...