Не работает стирание класса / добавление стиля.
Здравствуйте.
Подскажите, почему не работает? Есть код, который рисует несколько текстовых блоков с кнопкой <div class="showAnswer" id="hdn_<?php echo $showMessage['id'][$num]; ?>"> <textarea name="answerArea" class="textareaForAnswer"></textarea> <input type="button" class="questionBtn" name="sendAnswer" value="Послать ответ"> </div> Вот цсс дива: div.showAnswer {display: none;} т.е. он скрытый. Вот кнопка: <input type="button" class="questionBtn" name="answer" onclick='showAnswer(<?php echo $showMessage['id'][$num]; ?>)' value="Ответить"> Почему при нажатии на кнопку ничего не происходит? Вот JS код: 1 вариант:
function showAnswer(id) {
// alert(id);
document.getElementById('#hdn_'+id).removeClass('div.showAnswer');
}
2 вариант:
function showAnswer(id) {
// alert(id);
document.getElementById('#hdn_'+id).style.display = 'block';
}
Алерт выводит тот id на который я нажимаю, т.е. согласно этому коду должен либо убираться класс у id, который делает невидимым блок. Во-втором случае должен менятся стиль на блок. Но ни 1, ни во 2 случае ничего не происходит. Почему? Вот еще 3 вариант:
function showAnswer(id) {
document.getElementById('#hdn_'+id).className = document.getElementById('#hdn_'+id).className.replace('showAnswer', '');
}
|
выкиньте свой алерт нафиг. используйте отладчик f12 (в хроме встроенный, т.е. устанавливать не надо)
вот документация как пользоваться отладкой: http://learn.javascript.ru/debugging-chrome если вы сами научитесь отлаживать свой код, то это будет просто замечательно ;) |
skrudjmakdak, ну я смотрю через ф12, а через алерт вывожу значения в яваскрипте.
Кстати, я уже нашел почему не работало!!! Оказывается надо было удалить # в айдишниках, ЛОЛ. Но теперь другой вопрос, как сделать так, чтобы если я нажал 2 раз на кнопку, то форма обратно закрылась т.е. класс обратно приписался? |
вот пример:
<html>
<head>
<style>
div
{
width: 50px;
height: 50px;
margin: 10px;
background-color: red;
}
</style>
</head>
<body>
<div></div><div></div>
<script type="text/javascript">
var divs = document.querySelectorAll('div');
divs[0].onclick = function () {
this.style.visibility = 'hidden';
divs[1].style.visibility = 'visible';
}
divs[1].onclick = function () {
this.style.visibility = 'hidden';
divs[0].style.visibility = 'visible';
}
</script>
</body>
</html>
|
skrudjmakdak, у меня, почему-то, не работает ваш вариант, а что писать в куериСелекторАл?
А можно ли как-то сделать это как продолжение этого кода на чистом яваскрипте?
function showAnswer(id) {
document.getElementById('hdn_'+id).classList.remove('showAnswer');
}
Чтобы при нажатии менялся value кнопки, а при повторном нажатии форма закрывалась и value менялось обратно. Как-то так. |
Цитата:
открываешь отладчик, вкладка sourses(chrome). выбираешь нужный js файл и ставишь точки останова. и можешь смотреть значения переменных я просто когда тоже начинал, делал как ты. потом понял все прелести отладчика |
skrudjmakdak, а что на счет вопросов повыше?
Я тут пробое всякое, но, пока, не получается. |
<html>
<head>
</head>
<body>
<div>
<div>????? ?? ?????? 1</div>
<div><input type="button" value="click me" countClick="0" onclick="clk(this);"></div>
</div>
<div>
<div>????? ?? ?????? 2</div>
<div><input type="button" value="click me" countClick="0" onclick="clk(this);"></div>
</div>
<script>
function clk (ths) {
var countClick = ths.getAttribute('countClick');
++countClick;
if (countClick == 2)
ths.parentNode.parentNode.style.display = 'none';
else
ths.setAttribute('countClick', countClick);
}
</script>
</body>
</html>
|
Цитата:
Цитата:
Как вариант...
<!DOCTYPE html>
<html>
<head>
<!--
<script src='http://code.jquery.com/jquery-latest.js'></script>
<link rel='stylesheet type=text/css href=tmp.css' />
-->
<style type='text/css'>
div.showAnswer {
display: none;
}
</style>
<script type='text/javascript'>
function showAnswer(N) {
document.getElementById('hdn_'+N).className='';
};
</script>
</head>
<body>
<div class="showAnswer" id="hdn_1">
<textarea name="answerArea" class="textareaForAnswer"></textarea>
<input type="button" class="questionBtn" name="sendAnswer" value="Послать ответ">
</div>
<input type="button" class="questionBtn" name="answer" onclick='showAnswer(1)' value="Ответить">
</body>
</html>
|
ksa, да я уже нашел ответ, теперь ищу как сделать кое-что дургое...:
Чтобы при нажатии менялся value кнопки, а при повторном нажатии форма закрывалась и value менялось обратно. |
а я честно говоря вообще противник вот этого вот (имхо):
onclick='showAnswer(1)' куда лучше обернуть в еще один див. навешать события циклом и работать с dom. может я не прав, но я бы сделал так. ни каких айдишников, номеров и прочей шняги |
Цитата:
<!DOCTYPE html>
<html>
<head>
<!--
<script src='http://code.jquery.com/jquery-latest.js'></script>
<link rel='stylesheet type=text/css href=tmp.css' />
-->
<style type='text/css'>
div.showAnswer {
display: none;
}
</style>
<script type='text/javascript'>
function showAnswer(Obj,N) {
if (Obj.value=='Ответить') {
Obj.value='Отмена';
document.getElementById('hdn_'+N).className='';
} else {
Obj.value='Ответить';
document.getElementById('hdn_'+N).className='showAnswer';
}
};
</script>
</head>
<body>
<div class="showAnswer" id="hdn_1">
<textarea name="answerArea" class="textareaForAnswer"></textarea>
<input type="button" class="questionBtn" name="sendAnswer" value="Послать ответ">
</div>
<input type="button" class="questionBtn" name="answer" onclick='showAnswer(this,1)' value="Ответить">
</body>
</html>
|
лучше используй jquery. кода меньше и париться тоже
<html>
<head>
</head>
<body>
<div class="group">
<div class="form" style="display: none;">
<div><input type="text"></div>
<div><input type="button" value="click me"></div>
</div>
<div><input type="button" value="open"></div>
</div>
<div class="group">
<div class="form" style="display: none;">
<div><input type="text"></div>
<div><input type="button" value="click me"></div>
</div>
<div><input type="button" value="open"></div>
</div>
<script src="http://code.jquery.com/jquery-1.11.1.min.js"></script>
<script>
$('input[value="open"]').click(function () {
$(this).parents('.group').find('.form').css('display', 'block');
});
</script>
</body>
</html>
|
ksa, большое спасибо, мастер.
|
skrudjmakdak, ну я хочу, для начала, яваскрипт подучить получше.
|
ksa, а как сделать тоже самое, но если заметно id будет класс?
Вот яваскрипт (я пробовал ваш пример изменить)
function showAll(tObj){
if (tObj.value == 'Показать остальные сообщения') {
tObj.value = 'Скрыть остальные сообщения';
document.getElementsByClassName('hiddenTR').style.display = 'block';
} else {
tObj.value = 'Показать остальные сообщения';
document.getElementsByClassName('hiddenTR').style.display = 'block';
}
}
Вот элемент <tr class="hiddenTR"> ЦСС
tr.hiddenTR {
display: none;
}
Кнопка <input type="button" value="Показать остальные сообщения" class="questionBtn" onclick='showAll(this)'> |
оно?
<!DOCTYPE html>
<html>
<head>
<style type='text/css'>
div.showAnswer {
display: none;
}
</style>
</head>
<body>
<div class="showAnswer" id="hdn_1">
<textarea name="answerArea" class="textareaForAnswer"></textarea>
<input type="button" name="sendAnswer" value="Послать ответ">
</div>
<input type="button" class="questionBtn" name="answer" value="Показать остальные сообщения">
<div class="showAnswer" id="hdn_1">
<textarea name="answerArea" class="textareaForAnswer"></textarea>
<input type="button" name="sendAnswer" value="Послать ответ">
</div>
<input type="button" class="questionBtn" name="answer" value="Показать остальные сообщения">
<div class="showAnswer" id="hdn_1">
<textarea name="answerArea" class="textareaForAnswer"></textarea>
<input type="button" name="sendAnswer" value="Послать ответ">
</div>
<input type="button" class="questionBtn" name="answer" value="Показать остальные сообщения">
<script type='text/javascript'>
var but = document.getElementsByClassName('questionBtn'); //найдет массив из 3 кнопок
for (var i = 0, ln = but.length; i< ln; ++i) {//делаем цикл по каждой кнопке
but[i].onclick = function () { //присвоим каждой кнопке событие onclick
if (this.value == 'Показать остальные сообщения') {
this.value = 'Скрыть остальные сообщения';
this.previousElementSibling.style.display = 'block'; //previousElementSibling найдет предыдущий dom элемент
} else {
this.value = 'Показать остальные сообщения';
this.previousElementSibling.style.display = 'none';
}
}
}
</script>
</body>
</html>
|
skrudjmakdak, оно. Спасибо!
|
| Часовой пояс GMT +3, время: 00:47. |