1 значения chexbox 1 изображение
Здравствуйте. Нужна помощь. Подскажите пожалуйста как сделать так чтобы при клике на checkbox менялась картинка. При этом у меня 7 чекбоксов и 7картинок. При выборе одного чекбокса появляется картинка, с других чекбоксов снимается галочка и исчезают картинки прикрепленные к ним.
Пока у меня такой код: <input autocomplete="off" type = 'checkbox' id = 'cb1' onchange = 'showOrHide("cb1", "cat1");'/> Лестница 1 <br /> <input autocomplete="off" type = 'checkbox' id = 'cb2' onchange = 'showOrHide("cb2", "cat2");' /> Лестница 2 <br /> <input autocomplete="off" type = 'checkbox' id = 'cb3' onchange = 'showOrHide("cb3", "cat3");' /> Лестница 3 <br /> <input autocomplete="off" type = 'checkbox' id = 'cb4' onchange = 'showOrHide("cb4", "cat4");' /> Лестница 4 <br /> <input autocomplete="off" type = 'checkbox' id = 'cb5' onchange = 'showOrHide("cb5", "cat5");' /> Лестница 5 <br /> <input autocomplete="off" type = 'checkbox' id = 'cb6' onchange = 'showOrHide("cb6", "cat6");' /> Лестница 6 <br /> <input autocomplete="off" type = 'checkbox' id = 'cb7' onchange = 'showOrHide("cb7", "cat7");' /> Лестница 7
function showOrHide(cb, cat) {
cb = document.getElementById(cb);
cat = document.getElementById(cat);
if (cb.checked) cat.style.display = "block";
else cat.style.display = "none";
}
Сейчас галочки можно снимать только повторным нажатием. Если не снимать картинки перекрываются. Я на форуме нашел скрипт как сделать чтоб можно было выбирать только один чекбокс. Работает. Как бы объединить эти два скрита
var handler = function ( event ){
event = event || window.event;
var target = event.target || event.srcElement;
if ( target.nodeType == 1 && target.nodeName.toLowerCase == "input" && target.type == "checkbox" && target.checked ) {
var inputs = document.getElementsByTagName("input");
for ( var i = 0; inputs[i]; i++ ) {
if ( inputs[i].type="checkbox" && inputs != target ) {
inputs[i].checked = false;
}
}
}
}
if (document.body.addEventListener){
document.body.addEventListener('click', handler, false);
} else if (document.body.attachEvent){
document.body.attachEvent('onclick', handler);
}
|
Fanis V,
Пожалуйста, отформатируйте свой код! Для этого его можно заключить в специальные теги: js/css/html и т.п., например: [js] ... ваш код... [/js] О том, как вставить в сообщение исполняемый javascript и html-код, а также о дополнительных возможностях форматирования - читайте http://javascript.ru/formatting. |
Спасибо, отредактировал.
|
Попробуйте добавить строчки в showOrHide (перед 4-й строчкой)
var cats = document.querySelectorAll("[id^='cat']");
[].forEach.call(cats, function(el){
el.style.display = "none";
});
Цитата:
|
Fanis V,
<!DOCTYPE html>
<html>
<head>
<title>Untitled</title>
<meta charset="utf-8">
<style type="text/css">
#pic{
box-sizing:border-box;
border: 1px solid #0000FF;
height:200px;
width:300px;
margin: 0; padding: 0;
background-image: url(http://vremena-goda.su/uploads/posts/2015-12/thumbs/1450868041_begemot-foto-i-opisanie.jpg);
background-repeat: no-repeat;
background-size: cover;
}
#cb1:checked ~ #pic{
background-image: url(http://vremena-goda.su/uploads/posts/2015-12/thumbs/1450868041_begemot-foto-i-opisanie.jpg);
}
#cb2:checked ~ #pic{
background-image: url(http://zhivotnue.ru/image/dicie_zhivotnue/slonovue/4.jpg);
}
#cb3:checked ~ #pic{
background-image: url(https://dncache-mauganscorp.netdna-ssl.com/thumbseg/2150/2150535-bigthumbnail.jpg);
}
</style>
</head>
<body>
<input checked="checked" autocomplete="off" type ="radio" id = "cb1" name="show" >
<input autocomplete="off" type ="radio" id = "cb2" name="show">
<input autocomplete="off" type ="radio" id = "cb3" name="show">
<div id="pic"></div>
</body>
</html>
|
Спасибо большое. Быстро и оперативно ответили, все работает!
|
Через радио. Интересно, надо взять на заметку) Спасибо рони!
|
Все работает, но единственная проблема, если кликнуть на пустом месте или еще где-то в браузере. Картинка пропадает.
var handler = function ( event ){
event = event || window.event;
var target = event.target || event.srcElement;
var cats = document.querySelectorAll("[id^='cat']");
[].forEach.call(cats, function(el){
el.style.display = "none";
});
if ( target.nodeType == 1 && target.nodeName.toLowerCase == "input" && target.type == "checkbox" && target.checked ) {
var inputs = document.getElementsByTagName("input");
for ( var i = 0; inputs[i]; i++ ) {
if ( inputs[i].type="checkbox" && inputs != target ) {
inputs[i].checked = false;
}
}
}
};
if (document.body.addEventListener){
document.body.addEventListener('click', handler, false);
} else if (document.body.attachEvent){
document.body.attachEvent('onclick', handler);
}
|
| Часовой пояс GMT +3, время: 12:39. |