Я использую ScriptManager и виджет слайдера jQuery вместе на сайтах в течение многих лет, но недавно я столкнулся с проблемой, которая остановила работу виджета. Мне удалось решить проблему, но это было больше не повезло, чем опыт. Я надеюсь, что кто-то может обосновать эту проблему и что исправление может оказаться полезным для других с той же проблемой.
Я использую агрегатор script, который объединяет мои скрипты вместе - вот что он содержит - все фрагменты кода были сокращены для краткости:
vendor/Modernizr.min.js
vendor/jQuery.3.0.0.min.js
vendor/jQuery-UI.1.12.1.min.js
vendor/jQuery-UI.TouchPunch.min.js
propriertary/LoanSelector.js
DefaultInit.js
Вот содержимое DefaultInit.js:
$(document).ready(function () {
loanSelector.init();
});
Вот голые кости LoanSelector.js
var loanSelector = function () {
var pub = {}, $ctl = $("#loan-selector"),
$sliderAmount = $ctl.find(".slider-amount:first"),
$widgetAmount = $sliderAmount.find(".widget:first");
function initControl() {
initWidgetAmount(100, 2000, 100, $("#hfStartAmount").val());
}
function initWidgetAmount(min, max, step, initialVal) {
$widgetAmount.slider({
});
}
pub.init = function () {
initControl();
};
return pub;
} ();
Теперь это работает, но только без ScriptManager на странице.
Когда добавлен менеджер script, виджет слайдера не загружается - никаких ошибок - ничего.
Кэшированные элементы являются постоянными светильниками на странице, поэтому это не случай, когда элементы не существуют в определенный момент времени.
Здесь код ScriptManager:
<asp:ScriptManager ID="SM" runat="server"
EnableCdn="true"
LoadScriptsBeforeUI="false"
EnablePageMethods="true">
</asp:ScriptManager>
Если я вношу изменения, я могу заставить виджет загружать ScriptManager на странице - вот еще одна версия LoanSelector.js, которая работает:
var loanSelector = function () {
var pub = {}, $ctl, $sliderAmount, $widgetAmount;
function cacheElements() {
$ctl = $("#loan-selector"),
$sliderAmount = $ctl.find(".slider-amount:first"),
$widgetAmount = $sliderAmount.find(".widget:first");
}
function initControl() {
// This is new
cacheElements();
initWidgetAmount(100, 2000, 100, $("#hfStartAmount").val());
}
function initWidgetAmount(min, max, step, initialVal) {
$widgetAmount.slider({
});
}
pub.init = function () {
initControl();
};
return pub;
} ();
Итак, может кто-нибудь пролить свет на то, почему он может не работать и почему исправление работает?