Я использую cakephp 2.9.9, я хочу использовать простую функцию jquery и включена в default.ctp, но она не работает, как ожидалось. Детали следующие:
1. Я скачал JQuery Library jquery-3.2.1.js, мой javascript-файл называется script.js, я сохранил эти два файла в папке / app / webroot / js.
2. В моем файле default.ctp я добавил следующие строки —
echo $this->Html->script('jquery-3.2.1');
echo $this->Html->script('script');
echo $scripts_for_layout;
3. Я хочу изменить стиль моего меню навигации на основе текущей активной ссылки. Мой файл script.js выглядит следующим образом —
(function(){
console.log(1); //this can be seen on console
$("#nav a").on("click", function(e){
console.log(2); // this cannot be seen on console
$("#nav a").removeClass('active');
$(e.currentTarget).addClass('active');
});
})();
4. Когда я открываю свою страницу, страница вызывает файл скрипта (так как 1 выполняется на консоли), но не вызывает функцию .on () jquery. Есть идеи, почему это происходит?
Это может быть вызвано следующим:
console.log(1)
попробуй вывести в консоль console.log($)
ready()
функционировать как $(document).ready(function() { // code goes here });
#nav a
действительно существует на странице.nav a
?async/defer
на теги сценария, убедитесь, чтоdefer
(сохраняет порядок скриптов) илиe.preventDefault()
внутри обработчика кликов — обратите внимание, что в этом случае вы примените свой код, но новая страница не будет загружена по умолчанию — e.preventDefault()
отменяет это. Вместо этого вам нужно загрузить новый контент через AJAX или сохранить ссылку в переменной и открыть новую страницу в новой / текущей вкладке с JS, как document.location.assign = "link-to-a-new-page"
потом.Трудно сказать больше, потому что вы поделились лишь крошечной частью своего кода.
Я нашел решение этой проблемы. Вместо того чтобы использовать функцию jquery .on (), я меняю CSS на основе текущего URL. Мой код выглядит следующим образом:
$(document).ready(function(){
var nav = document.getElementById('nav');
var anchor = nav.getElementsByTagName('a');
var current = location.href;
for (var i = 0; i < anchor.length; i++) {
if(anchor[i].href == current) {
anchor[i].className = "active";
}
}
});