【问题标题】:Pass arrays in function在函数中传递数组
【发布时间】:2015-02-09 19:32:55
【问题描述】:

我创建了一个函数,但后来意识到我必须使用两个不同的参数调用它三次,所以我决定创建两个不同的数组并修改函数以便调用一次。修改功能后它不起作用,所以我不确定发生了什么。这里是:

function scrll(selector,speed){
                for (var i = 0; i < selector.length; i++){
                    var findIt = '.find("a")';
                    var selected = selector[i];
                    selected += findIt;
                    selected.click(function(e) {
                        e.preventDefault();
                        var section = $(this).attr("href");
                        $("html, body").animate({
                            scrollTop: $(section).offset().top - 54
                        },speed[i]);
                    });
                };
            };
var selector = ['$(".navbar")','$(".click")','$("#foot")'];
            var speed = [2000,1000,2000];
            scrll(selector,speed);

这是一个 jsfiddle 示例:http://jsfiddle.net/theMugician/31fws6kd/16/

【问题讨论】:

标签: javascript jquery arrays function


【解决方案1】:

您似乎认为您可以将一些字符串组合在一起,结果将是您通过执行该字符串的内容得到的结果。

JavaScript 不能那样工作。

这就是您可以像尝试那样使用选择器的方式。

function scrll(selectors, speed) {
    for (var i = 0; i < selectors.length; i++) {
        var selected = $(selectors[i]);
        var link = selected.find("a");

        link.click(function(e) {
            e.preventDefault();
            var section = $(this).attr("href");
            $("html, body").animate({
                scrollTop: $(section).offset().top - 54
            }, speed[i]);
        });
    }
}
var selectors = [".navbar", ".click", "#foot"];
var speed = [2000, 1000, 2000];
scrll(selectors, speed);

这里还有一个错误,因为i 是一个闭包变量,当事件运行时,它的值将是3,一切都会被破坏。解决此问题的一种简单方法是使用forEach()

function scrll(selectors, speed) {
    selectors.forEach(function (selector, i) {
        var selected = $(selector);
        var link = selected.find("a");

        link.click(function(e) {
            e.preventDefault();
            var section = $(this).attr("href");
            $("html, body").animate({
                scrollTop: $(section).offset().top - 54
            }, speed[i]);
        });
    });
}

【讨论】:

  • 感谢您的回答。解决方案比我想象的要简单。我仍在尝试完全掌握 Javascript 闭包。
猜你喜欢
  • 2014-07-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-24
  • 2020-01-25
相关资源
最近更新 更多