2016-03-08 6 views
0

Я пытаюсь добавить переход на мой сайт. Но по какой-то причине, когда я нажимаю на ссылку она перенаправляет mywebsite.com/undefinedJavascript page transition undefined

Это код, я использую

jQuery(document).ready(function($) { 
    $('.menu-item').click(function(event) { 
    event.preventDefault(); 
    newLocation = this.href; 
    $('.preloader').fadeIn(1000, newpage); 
    }); 

    function newpage() { 
    window.location = newLocation; 
    } 
}); 

Я не могу заставить его работать. Любая помощь будет оценена по достоинству.

+2

Вы не передадите новое место вашей функции –

ответ

2

Это потому, что newLocation не входит в сферу действия (доступно только в области функций click). (см Update 1.)

Вместо этого, передать его в функцию newPage следующим образом:

jQuery(document).ready(function($) { 
    $('.menu-item').click(function(event) { 
    event.preventDefault(); 

    $('.preloader').fadeIn(1000, function() { 
     // Pass this.href into the newPage function 
     newPage(this.href); 
    }); 
    }); 

    function newPage(newLocation) { 
    window.location = newLocation; 
    } 
}); 

Примечания:

  • Обратите внимание, что я передаю в функцию второй аргумент функции .fadeIn. (См API Docs.) Вы не может просто передать newPage(this.href) во второй аргумент, потому что будет передавать значение возврата функции newPage (которая равна нулю) в функцию .fadeIn.
  • Этот шаблон применяется к другим функциям jQuery, таким как .slideUp. Вот пример реализации .slideUp:

    $('.preloader').slideUp({ 
        duration: 1000, 
        easing: "easeInOutQuint" 
    }, function() { 
        newpage(this.href) 
    }); 
    

Update 1:

Как отметил Barmar в комментариях, так как newLocation не объявлена ​​с var в вашем фрагменте кода , он должен автоматически быть глобальной переменной. Таким образом, он действительно должен быть в области в функции newpage, и исходный фрагмент должен работать.

+2

Наверное, лучше фактически передать 'newLocation' в функцию, но для сохранения загрязнения –

+1

@DarrenSweeney, исправлено. Спасибо, что поймал это. –

+1

Хороший материал, все хорошо сейчас –