#javascript #css #html
#javascript #css #HTML
Вопрос:
Я намерен добавить класс в заголовок при нажатии на div. Я включил веб-сайт, с которым я работаю, просто чтобы упростить задачу:
URL-адрес — http://itsmontoya.com/work/iM /
Я добавил класс «расширенный» в заголовок. Это должно показать, как должна выглядеть навигация после нажатия кнопки. Я создал простой Javascript, который должен выдавать предупреждение при нажатии кнопки. Кажется, я не могу заставить это работать. Есть идеи о том, что я сделал не так?
Спасибо!
РЕДАКТИРОВАТЬ — я смог заставить оповещение правильно работать при нажатии кнопки div. Я очень близок к завершению! 🙂 Теперь я застрял с неправильной передачей переменной.
<script type= "text/javascript">
var expanded = false;
function btnClick(){
alert('The variable expanded is ' expanded);
if(expanded === false) {
document.getElementById("header").className = "expanded";
var expanded = true;
} else {
document.getElementById("header").className.replace(/bexpandedb/,'');
var expanded = false;
}
};
</script>
Сейчас я обновляю ftp-сервер 🙂
Комментарии:
1. Проверьте мой ответ на наличие полного рабочего источника.
Ответ №1:
При использовании jQuery вы должны привязывать свои события таким образом, чтобы элементы уже были загружены.
У вас есть:
<script type= "text/javascript">
$("#expandBtn").click(function(){
alert('hello');
});
</script>
Я думаю, что вы хотите:
<script type= "text/javascript">
$(document).ready(function(){
$("#expandBtn").click(function(){
alert('hello');
$('header').addClass('expanded');
});
});
</script>
Документация API будет вашим другом здесь. Первый шаг — ready()
.
Обновить
У вас есть этот вызов jQuery:
$j('#header').addClass('expanded');
Но ваша разметка предназначена для элемента HTML5 <header>
. В этом случае ваш jQuery необходимо изменить на:
$j('header').addClass('expanded');
Где $j
находится ваш объект jQuery. Более обычно вы бы использовали $
или jQuery
.
Время сосредоточиться на селекторах jQuery!
Обновить
Вот ваша обновленная страница:
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>itsMontoya</title>
<link rel="stylesheet" type="text/css" href="style.css" />
<link rel="shortcut icon" href="/favicon.ico" />
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js" type="text/javascript"></script>
<script type= "text/javascript">
$(document).ready(function(){
$('.expandBtn').bind('click', function(){
$('header').toggleClass('expanded');
});
});
</script>
</head>
<body>
<div class="wrap">
<header id="header" class="">
<div class="blackBG transparent"></div>
<nav>
<ul>
<li>
Home<img src="images/home.png">
</li>
<li>
Pictures<img src="images/pictures.png">
</li>
<li>
Music<img src="images/mymusic.png">
</li>
<li>
About Me<img src="images/aboutme.png">
</li>
<li>
Resume<img src="images/resume.png">
</li>
</ul>
</nav>
<div id="logo" class="logo"><p>itsMontoya</p></div><div id="expandBtn" class="expandBtn anchor"></div>
</header>
<section class="content">
<article class="blogEntry"></article>
</section>
<footer class="anchor">
<div class="over anchor"><p>2011 itsMontoya.com</p></div>
<div class="blackBG transparent anchor under"></div>
</footer>
</div>
</body>
</html>
Комментарии:
1. W00t! Это сработало очень хорошо, и код был очень чистым и простым.
2. Рад помочь. Мое предложение: проверьте эту страницу селекторов на сайте jQuery. Я также думаю, что вы многое получите от jqueryfordesigners.com . Как только вы прочтете немного больше, вы сможете сразу увидеть разницу между
$('header')
и$('#header')
и$('.header')
. Добро пожаловать в StackOverflow!3. Я решил добавить к этому элемент движения для более чистого эффекта. Не могли бы вы указать мне правильное направление для правильного переключения между входом и выходом?
4. Я смог изменить класс кнопки при нажатии. Кажется, на данный момент я не могу заставить анимацию вернуться к работе. Тем не менее, я добиваюсь хорошего прогресса! www.itsmontoya.com/work/iM/
5. Я смог установить значение window, которое переносится во все функции. Затем я создал оператор if / else, чтобы выбрать, какая анимация. Теперь входит и выходит. 🙂
Ответ №2:
Использование jQuery:
$('#your_div_id').click(function(){
console.log("Clicked.");
$("#header").addClass('expanded');
});
Обновить
В вашем коде:
var expanded = false;
function btnClick(test){
if($expanded === false) {
.
.
.
Что, черт $expanded
возьми, такое? Обратите внимание, что в JavaScript нам не нужен $
знак для переменных.
Ответ №3:
Вот как вы могли бы привязать обработчик кликов к своему div
и добавить класс в свой заголовок:
var yourDiv = document.getElementById('your-div-id');
var header = document.getElementById('header');
yourDiv.onclick = function(){
alert("yourDiv was clicked");
header.className = "newCssClass";
};
Приведенное выше предполагает разметку следующим образом:
<div id="your-div-id">Click</div>
<div id="header"></div>
Вот пример.
Обновление: причина, по которой expanded
переменная работает не так, как вы ожидаете, заключается в том, что вы создаете дублирующуюся локальную переменную, вызываемую expanded
в вашем btnClick()
методе. В результате глобальная expanded
переменная, которую вы объявляете вне функции, никогда не обновляется.
Это вызвано тем, как вы используете var
ключевое слово:
- При использовании вне функции
var
создает глобальную переменную, доступную в любом месте текущего документа. - При использовании внутри функции
var
создается локальная переменная, доступная только внутри этой функции.
Вот ваша функция, очищенная для работы так, как вы ожидаете:
// Define global variable (using var outside function)
var expanded = true;
function btnClick(){
alert('The variable expanded is ' expanded);
// Condition for true
if(expanded) {
// do something
// Condition for false
} else {
// do something else
}
// Flips boolean value of the global variable (notice lack of var keyword)
expanded = !expanded;
}
Вот пример, показывающий правильный способ обновления expanded
переменной.
Комментарии:
1. Я бы предпочел пройти весь маршрут Javascript, подобный этому. Я добился значительного прогресса в том, что я собирался. Прямо сейчас у меня возникли проблемы с переменной ‘expanded’, проходящей через функцию. Есть идеи?
2. Да, ваша проблема —
var
ключевое слово. Проверьте мой обновленный ответ.3. Я обновил скрипт на своем веб-сервере до метода, показанного в вашем примере, и jsfiddle. Я не могу заставить событие onClick работать. Я не уверен, какую часть я настроил неправильно:(.