(JQuery)我想知道为什么这段代码不起作用?

时间:2013-09-11 08:44:48

标签: javascript jquery html css

我已将其缩小到声明“position

的行
$(document).ready(function(){

        var sliders = new Array("#left","#middle","#right");
        var links = new Array("#fLink","#sLink","#tLink");

        $(".link").click(function(){

            var position = $("#" + sliders[links.indexOf("#" + this.id)]).position().left();

            alert(position);

            $(".slider").animate({left:gap}, 1500);

        });

});

1 个答案:

答案 0 :(得分:5)

sliders已经包含#,您不希望在$()内使用它时再次添加它,您最终会将"##left"传递给选择器字符串另请注意,left是一个值,而不是一个函数,因此后面没有()

所以:

var position = $("#" + sliders[links.indexOf("#" + this.id)]).position().left();
// Remove -------^^^^^^ and -------------------------------------------------^^

对于你正在做的事情,我不会使用一对数组,我会使用:

  1. 查找对象,或
  2. 命名约定,或
  3. data-*属性
  4. 最后两个是微不足道的,但这是第一个如何工作:

    $(document).ready(function () {
    
        var sliders = {
            "fLink": "#left",
            "sLink": "#middle",
            "tLink": "#right"
        };
    
        $(".link").click(function () {
    
            var sliderSel = sliders[this.id];
            if (sliderSel) {
                var position = $(sliderSel).position().left;
    
                alert(position);
    
                $(".slider").animate({
                    left: gap
                }, 1500);
            }
    
        });
    
    });
    

    旁注:gap是否在您未显示的代码中的某处定义了?如果没有,你会想要这样做。