C# 将jQuery更新到1.10.2后,Ajax调用后jQuery范围滑块不工作

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加载内容后,滑块似乎没有初始化,但不确定原因!

我正在开发一个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(/&amp/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(/&amp/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之后仍然传递旧的值!