Я новичок в 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 определены.Я не понимаю, как определить область действия плагина 'stars', который я пытаюсь использовать (http://orkans -tmp.22web.net / star_rating /), и почему он работает в обратном вызове внешней загрузки, но невнутренний.Помогите!
* РЕДАКТИРОВАНИЕ *
Итак, я разработал способ сделать эту работу.Мне неясно, почему плагин jquery stars ui, по-видимому, не существует во внутренних обратных вызовах .load, но мне удалось решить эту проблему, внедрив следующий код для принудительной загрузки плагина:
Replace
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, который я пытаюсь использовать, но я не совсем понимаю ...