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

-2 html javascript css jquery

我把它缩小到声明' 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);

        });

});
Run Code Online (Sandbox Code Playgroud)

T.J*_*der 5

sliders已经有了#它,你不想在其中使用它时再次添加它$(),你最终"##left"作为选择器字符串传入.另请注意,这left是一个值,而不是一个函数,因此不会()在它之后.

所以:

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

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

  1. 查找对象,或
  2. 命名约定,或
  3. 一个data-*属性

最后两个是微不足道的,但这是第一个如何工作:

$(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);
        }

    });

});
Run Code Online (Sandbox Code Playgroud)

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