2015-02-09 71 views
-1

我创建了一个函数,但后来意识到我必须用两个不同的参数调用它三次,所以我决定创建两个不同的数组并修改函数,以便调用一次。修改后的功能它不起作用,所以我不知道发生了什么。那就是:在函数中传递数组

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/

+1

的可能重复[JavaScript的闭包内环路 - 简单实用的例子(http://stackoverflow.com/questions/750486/javascript-closure-inside-loops -simple-practical-example) – Scimonster 2015-02-09 19:34:48

+0

你的问题是什么? – bhspencer 2015-02-09 19:37:14

+2

'selected'这里是一个字符串。它没有'click()'方法。 – JLRishe 2015-02-09 19:37:31

回答

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]); 
     }); 
    }); 
} 
+0

谢谢你的回答。解决方案比我想象的要简单。我仍然试图完全掌握Javascript关闭。 – 2015-02-12 19:23:42