Javascript JQuery绑定在循环中出错

Javascript JQuery绑定在循环中出错,javascript,jquery,Javascript,Jquery,我有一个JQuery代码,它试图在for循环中创建JQuery滑块- function initSliderUI(){ $('.opt-range-slider').each(function(){ $this = $(this); elementId = $this.attr('id'); filterUIObj = getFilterUIObjFromOptionId(elementId); filterName = f

我有一个JQuery代码,它试图在for循环中创建JQuery滑块-

function initSliderUI(){
    $('.opt-range-slider').each(function(){
        $this = $(this);
        elementId = $this.attr('id');
        filterUIObj = getFilterUIObjFromOptionId(elementId);
        filterName = filterUIObj.getAttribute('data-filter-name');
        addSliderUI(filterName, elementId, getSliderFilterRangeArray(filterName));
    });
}
//this is not working due to binding problems
function addSliderUI(type, elementId, dataArray){
    filterUIObj = getFilterUIObjFromOptionId(elementId);
    filterUIObj.data[1].data[0].data[0].data[0].setData(dataArray[0] + ' - ' + dataArray[dataArray.length-1]);
    $('#'+elementId).slider({
        range: true,
        min: 1,
        max: dataArray.length,
        step: 0.001,
        values: [1, dataArray.length],
        change: function (event, ui) {
            if(dataArray.length > 1){
                $filteredRows = applyRangeFilter(type, dataArray[Math.round(ui.values[0])-1], dataArray[Math.round(ui.values[1])-1]);
                toggleApplicantFilteredRows($filteredRows);
                //problem is in this line below (filterUIObj)
                filterUIObj.data[1].data[0].data[0].data[0].setData(getSliderFilterRangeText(type, dataArray[Math.round(ui.values[0])-1], dataArray[Math.round(ui.values[1])-1]));
            }
        },
        slide: function (event, ui) {
            //problem is in this line below (filterUIObj)
            filterUIObj.data[1].data[0].data[0].data[0].setData(getSliderFilterRangeText(type, dataArray[Math.round(ui.values[0])-1], dataArray[Math.round(ui.values[1])-1]));
        },
        start: function (event, ui) {},
        stop: function (event, ui) {}
    });
}
在我的循环中,我使用“opt range slider”类获取一些元素,并将它们绑定到jquery的slider(..)小部件。在此过程中,我传递了一些自定义类对象“filterUIObj”。此对象正在initSliderUI(…)中正确传递。但是当我滑动滑块时,在“slide:function(event,ui){…}”中应该发生的任何事情都会发生在循环中最后一个“filterUIObj”对象上

假设我只有两个滑块。当我滑动第一个滑块时,第二个滑块文本中的数据正在更新

我哪里做错了?附近有工作吗?我不能单独绑定它们,因为具有滑块的对象的数量是在运行时决定的,所以必须针对每个循环

编辑-添加了一些辅助函数

function getFilterUIObjFromOptionId(optId){
    return generatedIds[$('#'+optId).closest('.filter').attr('id')];
}

在Javascript中,所有未使用
var
声明的变量都成为顶级全局变量。当使用
var
声明时,它们成为函数范围

在函数体中声明全局变量是没有用的,所以省略
var
几乎总是一个错误。它会导致不同的函数都写入同一个变量,并且通常不会很好地结束


一个静态分析器,如(也可用作)会指出错误。您应该养成使用此类工具检查代码以避免错误的习惯。

通常需要查看
getFilterUIObjFromOptionId
函数。尝试更改
filterUIObj.data[1].data[0].data[0].data[0].setData(GetSliderFilterranGetText(类型,dataArray[Math.round(ui.values[0])-1]),dataArray[Math.round(ui.values[1])
$(this.data[1]。数据[0]。数据[0]。数据[0]。setData(GetSliderFilterranGetText(类型,dataArray[Math.round(ui.values[0])-1],dataArray[Math.round(ui.values[1])-1])您缺少所有
var
关键字。正确声明变量在Javascript中不是可选的。没有
var
一切都是全局的,不管它在哪里声明,您肯定不希望这样。@bassxzero:我不能做$(这个),因为$(这个)将没有“数据”“要素。我的filterUIObj是我的自定义构建对象。我正在构建一个在JQuery上工作的前端框架类,这样我的团队中的开发人员就不必担心它了。@Tomalak:啊,这太完美了。成功了。我现在觉得自己很愚蠢。今天我学到了一些东西P谢谢。那么,为什么在OP指出这是他代码中的错误后,这又被否决了呢?说真的……在我看来,这些天有人只是为了好玩而拒绝投票+1谢谢你的回答。在我身上不常出现游离的、无法解释的反对票。奇怪。