C# 将jQuery更新到1.10.2后,Ajax调用后jQuery范围滑块不工作
我正在开发一个asp.net C#MVC web应用程序,它提供了一个jquery UI价格范围过滤器,用于根据选定的价格范围过滤产品。最终的产品是通过Ajax加载的,到目前为止一切都正常。但是,在升级到jQuery版本1.10.2和jQuery UI 1.10.3后,相同的滑块在第一次加载时工作,但在Ajax请求后无法加载。下面的代码位于正在实施过滤器的页面上 同样的代码在jQuery1.7.1和jQueryUI1.10.0中运行良好 通过Ajax加载内容后,滑块似乎没有初始化,但不确定原因!这里可能出了什么问题C# 将jQuery更新到1.10.2后,Ajax调用后jQuery范围滑块不工作,c#,javascript,jquery,ajax,jquery-ui-slider,C#,Javascript,Jquery,Ajax,Jquery Ui Slider,我正在开发一个asp.net C#MVC web应用程序,它提供了一个jquery UI价格范围过滤器,用于根据选定的价格范围过滤产品。最终的产品是通过Ajax加载的,到目前为止一切都正常。但是,在升级到jQuery版本1.10.2和jQuery UI 1.10.3后,相同的滑块在第一次加载时工作,但在Ajax请求后无法加载。下面的代码位于正在实施过滤器的页面上 同样的代码在jQuery1.7.1和jQueryUI1.10.0中运行良好 通过Ajax加载内容后,滑块似乎没有初始化,但不确定原因!
$("#slider-range").slider({
range: true,
min: minValue,
max: maxValue,
values: [selectedMinValue, selectedMaxValue],
values: [selectedMinValue, selectedMaxValue],
slide: function (event, ui) {
//Note: Currency Custom formatting is not supported.
$(".currentMinPrice").html('@(Model.PriceRangeFilterContext.CurrencySymbol) ' + ui.values[0]);
$(".currentMaxPrice").html('@(Model.PriceRangeFilterContext.CurrencySymbol) ' + ui.values[1]);
},
change: function (event, ui) {
var url = removeParameter('@(currentURL)', "price");
var newUrl = url.replace(/&/g, '');
if (isAjaxRequest) {
callAjax(UpdateQueryString("price", ui.values[0] + "-" + ui.values[1], newUrl));
}
}
});
isAjaxRequest = true;
$(".currentMinPrice").html('@(Model.PriceRangeFilterContext.CurrencySymbol) ' + $("#slider-range").slider("values", 0));
$(".currentMaxPrice").html('@(Model.PriceRangeFilterContext.CurrencySymbol) ' + $("#slider-range").slider("values", 1));
}
Ajax函数
$.ajax(
{
url: url,
type: 'POST',
success: function (result)
{
// Result is in html
$('#catalog').replaceWith(result);
$('#ajax-loading').hide();
DisplayFilter();
//Lazy Loading
$("img.lazy").show().lazyload(
{
effect: "fadeIn"
});
$(window).trigger("scroll");
}
});
我认为在渲染滑块后需要初始化滑块。在初始渲染之后创建的DOM元素都不会被已经运行的javascript初始化或绑定 因此,首先将初始化封装在函数中:
function initSlider(passedMin, passedMax)
{
$("#slider-range").slider({
range: true,
min: passedMin,
max: passedMax,
values: [selectedMinValue, selectedMaxValue],
values: [selectedMinValue, selectedMaxValue],
slide: function (event, ui) {
//Note: Currency Custom formatting is not supported.
$(".currentMinPrice").html('@(Model.PriceRangeFilterContext.CurrencySymbol) ' + ui.values[0]);
$(".currentMaxPrice").html('@(Model.PriceRangeFilterContext.CurrencySymbol) ' + ui.values[1]);
},
change: function (event, ui) {
var url = removeParameter('@(currentURL)', "price");
var newUrl = url.replace(/&/g, '');
if (isAjaxRequest) {
callAjax(UpdateQueryString("price", ui.values[0] + "-" + ui.values[1], newUrl));
}
}
});
isAjaxRequest = true;
$(".currentMinPrice").html('@(Model.PriceRangeFilterContext.CurrencySymbol) ' + $("#slider-range").slider("values", 0));
$(".currentMaxPrice").html('@(Model.PriceRangeFilterContext.CurrencySymbol) ' + $("#slider-range").slider("values", 1));
}
}
然后在AJAX中,在成功时调用init函数
$.ajax(
{
url: url,
type: 'POST',
success: function (result)
{
// Result is in html
$('#catalog').replaceWith(result);
$('#ajax-loading').hide();
DisplayFilter();
//Lazy Loading
$("img.lazy").show().lazyload(
{
effect: "fadeIn"
});
$(window).trigger("scroll");
initSlider(newMin, newMax)
}
});
我会尝试使用,只是想看看它到底能起到什么作用,然后我可能会返回jQuery日志,看看ajax调用发生了什么变化,您可能会遗漏一些东西。。。jQueryUI也一样(这里一定很快,因为您有1.10.0,现在只升级了3个版本)。您好,我们尝试了jQueryMigrate,但没有相关的注意事项。我将使用jquerylogsplz进行检查,并将您的Ajax代码发布到question@DaveA用ajax代码更新了问题。请看一看。谢谢,我会用try/catch包装代码,并将错误转储到控制台(通过
console.log()
);这至少可以告诉你是否发生了实际的错误。我已经试过了,这个很有效。但是,现在函数执行时,传递给slider()的min和max变量中的值在ajax调用后不会更新。它采用原始价格,因此破坏了功能。你能给我们一个关于如何解决这个问题的线索吗?@Krunal,那么我们应该重新编写函数,以min和max作为参数——我只是不确定这些数据应该来自哪里。。。结果?@ Krnar考虑回传一个<代码>对象:{HTMLMult:HTML,MimReult:MimValm,Max Realth:Max Val} < /代码>。然后您可以将它们引用为result.html、result.minresult、result.maxresult
我已经尝试过像您建议的那样传递值,但是它仍然不会更新声明的变量,不知道为什么!知道有什么问题吗?我已经尝试过你建议的解决方案,我尝试过在Ajax函数和调用slider之前将值打印到alert中。然而,该值似乎在ajax之后在结果html中更新,但在传递给slider和alert的变量中,它仍然是旧值。我不知道为什么它在ajax之后仍然传递旧的值!