2015-02-09 3 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 -простой-практический пример) – Scimonster

+0

В чем вопрос? – bhspencer

+2

'selected' вот строка. У него нет метода 'click()'. – JLRishe

ответ

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. –

Смежные вопросы