Ben yıllardır sitelerdeki ScriptManager ve jQuery kaydırıcı widget'ını birlikte kullanıyorum ama son zamanlarda widget'ı çalışmayı durduran bir soruna karşı çıktım. Sorunu çözmeyi başardım, ama uzmanlıktan daha şanslıydı. Birisinin sorunun ardında mantık yürütmesini ve düzeltmenin aynı konuya sahip başkalarına yararlı olabileceğini umuyorum.Asp.Net ScriptManager jQuery Widget ile sorunlara neden oluyor
ben birlikte benim komut birleştiren bir komut toplayıcısı kullanabilir - burada içerdiği budur - tüm kod parçacıkları kısalık için aşağı eşleştirilmiş edilmiştir:
: Buradavendor/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 içeriği olan İşte
$(document).ready(function() {
loanSelector.init();
});
Şimdi bu 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;
}();
çıplak kemikleri çalışır - ancak sayfadaki ScriptManager olmadan.
Komut dosyası yöneticisi eklendiğinde, kaydırıcı küçük aracı yüklenmez - hata yok - hiçbir şey.
Önbelleğe alınan öğeler sayfada kalıcı birer bağlantıdır - bu nedenle, belirli bir zamanda bulunmayan öğelerin durumu değildir.
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;
}();
: Burada çalışan LoanSelector.js başka versiyonu -
<asp:ScriptManager ID="SM" runat="server"
EnableCdn="true"
LoadScriptsBeforeUI="false"
EnablePageMethods="true">
</asp:ScriptManager>
Ben değişiklik yaparsanız, ben sayfada betiği betik ile yüklemek için widget'ı alabilirsiniz:
İşte ScriptManager'ın kodu
Peki, kimse neden çalışmıyor olabileceğine ve düzeltmenin neden işe yarayacağına ışık tutabilir mi? Yürüttüğü olarak
birkaç soru, konsolda bir hata olduğunu? hata ayıklayıcısını koymayı denediniz mi; Neyin vurulduğunu görmek için işlevinizin bölümlerine mi? loanSelector'ın init() işlevi nedir? Bunu pub nesnesinde görüyorum, fakat siz loanSelector.init() çağırıyorsunuz, sadece loanSelector() 'ı çağırmanız mı gerekiyor? – andrewf
Muhtemelen ScriptManager'ın komut dosyalarının nasıl yüklendiğini değiştirmesi gerektiğini düşünüyorum, eğer betiğiniz HTML yüklenmeden önce yüklüyse, o zaman elemanı bulamaz. Bunu kontrol etmenin en kolay yolu, initWidgetAmount yöntemini çağırmadan hemen önce her çalışma ve çalışma dışı çözüm için "conslole.log ($ ctl.length)" ifadesini eklemektir. Eğer uzunluk 0 ise, çalışmayan örnekte, HTML içeriğinin yüklü olmadığını gösterir. yöntem çağrıldığında –
@andrewf - Sayfayı Chrome'da inceledim ve herhangi bir bariz hata göremedim - pub genel arabirim - ben init dosyasında init diyoruz.x –