Простой динамический список
Подскажите пожалуйста реализацию для всех браузеров:
<select> <option>1 вариант</option> <option>2 вариант</option> </select> <div>Блок виден при выборе 1 варианта и "display:none" при выборе второо</div> <div>Блок не отображается при выборе 1 варианта и появляется при выборе второо</div> Вариантов 2, а динамических блоков несколько. |
<style> div { display: none ; } </style> <select onchange="change(this.value);"> <option value=1 selected>1 вариант</option> <option value=2>2 вариант</option> </select> <div>Блок виден при выборе 1 варианта и "display:none" при выборе второо</div> <div>Блок не отображается при выборе 1 варианта и появляется при выборе второо</div> <script> var divs = document.getElementsByTagName("div") ; function change(i) { i = i-1 ; divs[i].style.display = "block" ; i = !i - 0 ; divs[i].style.display = "none" ; } ; change(1) ; </script> |
Hekumok, спасибо. Можно немного по-другому? - чтобы блоки с одним классом показывась при первом варианте, а с другим при втором?. - чтобы можно было сделать много дин. блоков и они не влияли на другие блоки страницы.
|
конечно можно
<style> .div2 { display: none ; } </style> <select onchange="change(this.value);"> <option value=1 selected>1 вариант</option> <option value=2>2 вариант</option> </select> <div class="div1">Блок виден при выборе 1 варианта и "display:none" при выборе второо</div> <div class="div2">Блок не отображается при выборе 1 варианта и появляется при выборе второо</div> <div class="div1">Блок виден при выборе 1 варианта и "display:none" при выборе второо</div> <div class="div2">Блок не отображается при выборе 1 варианта и появляется при выборе второо</div> <div class="div1">Блок виден при выборе 1 варианта и "display:none" при выборе второо</div> <div class="div2">Блок не отображается при выборе 1 варианта и появляется при выборе второо</div> <script> var divs = [document.getElementsByClassName("div1"), document.getElementsByClassName("div2")] ; function change(i) { i = i-1 ; var nodeList = divs[i] ; var l = nodeList.length ; while(l--) nodeList[l].style.display = "block" ; i = !i - 0 ; nodeList = divs[i] ; l = nodeList.length ; while(l--) nodeList[l].style.display = "none" ; } ; </script> |
Здравствуйте, данное решение не работает в ie8, как бы сделать так, чтобы в этом браузере все работало? спасибо)
|
jQuery или самостоятельно фильтровать элементы по классу.
|
Замени getElementsByClassName("div1") на querySelectorAll(".div1")
|
Заменил, не работает ни в одном браузере
|
Ну и зачем врать?
<style> .div2 { display: none ; } </style> <select onchange="change(this.value);"> <option value=1 selected>1 вариант</option> <option value=2>2 вариант</option> </select> <div class="div1">Блок виден при выборе 1 варианта и "display:none" при выборе второо</div> <div class="div2">Блок не отображается при выборе 1 варианта и появляется при выборе второо</div> <div class="div1">Блок виден при выборе 1 варианта и "display:none" при выборе второо</div> <div class="div2">Блок не отображается при выборе 1 варианта и появляется при выборе второо</div> <div class="div1">Блок виден при выборе 1 варианта и "display:none" при выборе второо</div> <div class="div2">Блок не отображается при выборе 1 варианта и появляется при выборе второо</div> <script> var divs = [document.querySelectorAll(".div1"), document.querySelectorAll(".div2")] ; function change(i) { i = i-1 ; var nodeList = divs[i] ; var l = nodeList.length ; while(l--) nodeList[l].style.display = "block" ; i = !i - 0 ; nodeList = divs[i] ; l = nodeList.length ; while(l--) nodeList[l].style.display = "none" ; } ; </script> |
Спасибо большое, разобрался, вставлял скрипт в head, поэтому не работало, также задумался о том как бы сделать все тоже самое но без select, бывает трудно его стилизовать, видел на сайте rkz.ru как это сделано, но в коде не могу разобраться, как сделать, помогите плиз.
|
Привет, не силен в java. Подскажите плз, как сделать, чтобы третий вариант нормально работал, не могу разобраться. Помогите плз
<style> .div2 { display: none ; } </style> <style> .div3 { display: none ; } </style> <select onchange="change(this.value);"> <option value=1 selected>1 вариант</option> <option value=2>2 вариант</option> <option value=3>3 вариант</option> </select> <div class="div1"><input type="checkbox" value="Курс 1" />Курс 1<br /></div> <div class="div1"><input type="checkbox" value="Курс 2" />Курс 2<br /></div> <div class="div1"><input type="checkbox" value="Курс 3" />Курс 3<br /></div> <div class="div2"><input type="checkbox" value="нКурс 1" />нКурс 1<br /></div> <div class="div2"><input type="checkbox" value="нКурс 2" />нКурс 2<br /></div> <div class="div2"><input type="checkbox" value="нКурс 3" />нКурс 3<br /></div> <div class="div3"><input type="checkbox" value="ннКурс 1" />ннКурс 1<br /></div> <div class="div3"><input type="checkbox" value="ннКурс 2" />ннКурс 2<br /></div> <script> var divs = [document.querySelectorAll(".div1"), document.querySelectorAll(".div2"), document.querySelectorAll(".div3")] ; function change(i) { i = i-1 ; var nodeList = divs[i] ; var l = nodeList.length ; while(l--) nodeList[l].style.display = "block" ; i = !i - 0 ; nodeList = divs[i] ; l = nodeList.length ; while(l--) nodeList[l].style.display = "none" ; i = 1 - 0 ; nodeList = divs[i] ; l = nodeList.length ; while(l--) nodeList[l].style.display = "none" ; } ; </script> в данном случае 1 и 3 вариант отрабатывает нормально. а когда выбираешь 2 то блоки 3 варианта накладываются на 2 вариант |
а что у вас за выражение:
i = !i - 0; //так не делают. результатом будет булево значение а потом вы это булево значение запихивайте в массив divs[i]; ктож так делает? в массив должно идти число, причем целое!! и зачем писать: i = i-1; в самом начале, когда можно в самом option описать value с нуля: <option value=0 selected>1 вариант</option> <option value=1>2 вариант</option> <option value=2>3 вариант</option> |
1baddog1,
Вариант ... <!DOCTYPE HTML> <html> <head> <title>Untitled</title> <meta charset="utf-8"> </head> <body> <style> .div2 { display: none ; } </style> <style> .div3 { display: none ; } </style> <select onchange="change(this.value);"> <option value=1 selected>1 вариант</option> <option value=2>2 вариант</option> <option value=3>3 вариант</option> </select> <div class="div1"><input type="checkbox" value="Курс 1" />Курс 1<br /></div> <div class="div1"><input type="checkbox" value="Курс 2" />Курс 2<br /></div> <div class="div1"><input type="checkbox" value="Курс 3" />Курс 3<br /></div> <div class="div2"><input type="checkbox" value="нКурс 1" />нКурс 1<br /></div> <div class="div2"><input type="checkbox" value="нКурс 2" />нКурс 2<br /></div> <div class="div2"><input type="checkbox" value="нКурс 3" />нКурс 3<br /></div> <div class="div3"><input type="checkbox" value="ннКурс 1" />ннКурс 1<br /></div> <div class="div3"><input type="checkbox"value="ннКурс 2" />ннКурс 2<br /></div> <script> var divs = document.querySelectorAll(".div1, .div2, .div3") ; function change(i) { var nodeList = divs, l = nodeList.length ; while(l--) nodeList[l].style.display = "none" ; nodeList = document.querySelectorAll(".div"+i) ; l = nodeList.length ; while(l--) nodeList[l].style.display = "block" ; } ; </script> </body> </html> |
Поставил с нуля. Но при таком варианте тоже не правильно работает. На блоки 1 варианта накладывается блоки 3 варианта.
<script> var divs = [document.querySelectorAll(".div1"), document.querySelectorAll(".div2"), document.querySelectorAll(".div3")] ; function change(i) { i = i - 0 ; var nodeList = divs[i] ; var l = nodeList.length ; while(l--) nodeList[l].style.display = "block" ; i = i - 1; nodeList = divs[i] ; l = nodeList.length ; while(l--) nodeList[l].style.display = "none" ; } ; </script> |
спасибо! Рони так идеально отрабатывает
|
всё конечно теперь супер работает, ещё раз спасибо.
</style> <select onchange="change(this.value);"> <option value=1 selected>1 вариант</option> <option value=2>2 вариант</option> <option value=3>3 вариант</option> </select> Подскажите плз(использую cms modx и eform), мне надо сделать так </style> <select onchange="change(this.value);"> <option value=1 вариант selected>1 вариант</option> <option value=2 вариант>2 вариант</option> <option value=3 вариант>3 вариант</option> </select> чтобы в репорте отображался текст выбранного варианта. скрипт перестаёт работать, когда меняю значение в value. |
Цитата:
<option value="2 вариант">2 вариант</option> и для получения числа из строки http://javascript.ru/parseFloat function change(i) { i = parseFloat(i); |
кусок репорта:
<li><b>отделение:</b> [+otdel+]</li> <li><b>Ответы вопроса</b> [+newkursy+]</li> сам скрипт сейчас такой: <style> .div2 { display: none ; } </style> <style> .div3 { display: none ; } </style> <p><label>Вопрос?</label><br /> <p><label for="otdel">Выберите отделение</label><br /> <select id="otdel" name="otdel" onchange="change(this.value); "> <option value="1">отделение м</option> <option value="2">отделение б</option> <option value="3">отделение в</option> </select> <div class="div1"><input type="checkbox" name="newkursy[]" value="Курс 1" />Курс 1<br /></div> <div class="div1"><input type="checkbox" name="newkursy[]" value="Курс 2" />Курс 2<br /></div> <div class="div1"><input type="checkbox" name="newkursy[]" value="Курс 3" />Курс 3<br /></div> <div class="div2"><input type="checkbox" name="newkursy[]" value="нКурс 1" />нКурс 1<br /></div> <div class="div2"><input type="checkbox" name="newkursy[]" value="нКурс 2" />нКурс 2<br /></div> <div class="div2"><input type="checkbox" name="newkursy[]" value="нКурс 3" />нКурс 3<br /></div> <div class="div3"><input type="checkbox" name="newkursy[]" value="ннКурс 1" />ннКурс 1<br /></div> <div class="div3"><input type="checkbox" name="newkursy[]" value="ннКурс 2" />ннКурс 2<br /></div> <script> var divs = document.querySelectorAll(".div1, .div2, .div3") ; function change(i) { var nodeList = divs, l = nodeList.length ; while(l--) nodeList[l].style.display = "none" ; nodeList = document.querySelectorAll(".div"+i) ; l = nodeList.length ; while(l--) nodeList[l].style.display = "block" ; } ; </script> в репорте где [+otdel+] берется значение из value и при формировании репорта в зависимости от выбранного варианта подставляется 1, 2 или 3 а если value прописать так: <option value="отделение м">отделение м</option> <option value="отделение б">отделение б</option> <option value="отделение в">отделение в</option> то снизу не появляется select |
Цитата:
|
тогда
« MODx Parse Error » MODx encountered the following error while attempting to parse the requested resource: « PHP Parse Error » PHP error debug Error: Invalid argument supplied for foreach() Error type/ Nr.: Warning - 2 File: /home/site/html/assets/snippets/eform/eform.inc.php Line: 851 Line 851 source: foreach ($attributes as $k => $v) Parser timing MySQL: 0,0003 s (1 Requests) PHP: 0,0355 s Total: 0,0357 s |
Цитата:
чё то в голову не приходит как подставить, помогите плз |
1baddog1,
сделайте селектор с кавычками в значении и вытащите цифру в скрипте так будет проще. |
Цитата:
|
Цитата:
|
Цитата:
|
Цитата:
Подскажи, думаю простой вопрос У меня для текста есть класс стиля (class="nameclass") я хочу чтобы этот стиль применялся на текст в div-ах. Понимаю, что нужно правильно добавить тут: <style> .div2 { display: none ; } </style> <style> .div3 { display: none ; } </style> Прописать class:nameclass; не канает) Целиком <!DOCTYPE HTML> <html> <head> <title>Untitled</title> <meta charset="utf-8"> </head> <body> <style> .div2 { display: none ; } </style> <style> .div3 { display: none ; } </style> <select onchange="change(this.value);"> <option value=1 selected>1 вариант</option> <option value=2>2 вариант</option> <option value=3>3 вариант</option> </select> <div class="div1"><input type="checkbox" value="Курс 1" />Курс 1<br /></div> <div class="div1"><input type="checkbox" value="Курс 2" />Курс 2<br /></div> <div class="div1"><input type="checkbox" value="Курс 3" />Курс 3<br /></div> <div class="div2"><input type="checkbox" value="нКурс 1" />нКурс 1<br /></div> <div class="div2"><input type="checkbox" value="нКурс 2" />нКурс 2<br /></div> <div class="div2"><input type="checkbox" value="нКурс 3" />нКурс 3<br /></div> <div class="div3"><input type="checkbox" value="ннКурс 1" />ннКурс 1<br /></div> <div class="div3"><input type="checkbox"value="ннКурс 2" />ннКурс 2<br /></div> <script> var divs = document.querySelectorAll(".div1, .div2, .div3") ; function change(i) { var nodeList = divs, l = nodeList.length ; while(l--) nodeList[l].style.display = "none" ; nodeList = document.querySelectorAll(".div"+i) ; l = nodeList.length ; while(l--) nodeList[l].style.display = "block" ; } ; </script> </body> </html> |
1baddog1,
посмотрите внимательно стили, скрипт и селектор. это для примера. <!DOCTYPE HTML> <html> <head> <title>Untitled</title> <meta charset="utf-8"> </head> <body> <style> .div1,.div2,.div3 { display: none ; background: #fc0; /* Цвет фона */ -moz-box-shadow: 0 0 10px rgba(0,0,0,0.5); /* Для Firefox */ -webkit-box-shadow: 0 0 10px rgba(0,0,0,0.5); /* Для Safari и Chrome */ box-shadow: 0 0 10px rgba(0,0,0,0.5); /* Параметры тени */ padding: 10px; } </style> <select onchange="change(this.value);"> <option value='1 вариант' selected>1 вариант</option> <option value='2 вариант'>2 вариант</option> <option value='3 вариант'>3 вариант</option> </select> <div class="div1"><input type="checkbox" value="Курс 1" />Курс 1<br /></div> <div class="div1"><input type="checkbox" value="Курс 2" />Курс 2<br /></div> <div class="div1"><input type="checkbox" value="Курс 3" />Курс 3<br /></div> <div class="div2"><input type="checkbox" value="нКурс 1" />нКурс 1<br /></div> <div class="div2"><input type="checkbox" value="нКурс 2" />нКурс 2<br /></div> <div class="div2"><input type="checkbox" value="нКурс 3" />нКурс 3<br /></div> <div class="div3"><input type="checkbox" value="ннКурс 1" />ннКурс 1<br /></div> <div class="div3"><input type="checkbox"value="ннКурс 2" />ннКурс 2<br /></div> <script> var divs = document.querySelectorAll(".div1, .div2, .div3") ; function change(i) { i = parseFloat(i); var nodeList = divs, l = nodeList.length ; while(l--) nodeList[l].style.display = "none" ; nodeList = document.querySelectorAll(".div"+i) ; l = nodeList.length ; while(l--) nodeList[l].style.display = "block" ; } ; change(1) </script> </body> </html> |
Спасибо!!!! получилось, что я хотел!
|
Цитата:
<p><label for="uchilsya" class="blocktitle2">Вопрос?</label></p> <p><input type="radio" name="oldschool[]" value="Да" eform="Проверка выбора инпутов::1:" onclick="if(this.checked){document.getElementById('nextSibling').style.display='inline-block'}else {document.getElementById('nextSibling').style.display='none'; document.getElementById('nextSibling').value='';}" class="blocktitle2"><label for="uchda" class="blocktitle2">Да</label> <input type="text" size="33" name="kakiekurse" placeholder="Вопрос при выборе Да" style="display: none;" id="nextSibling"> <br/> <input type="radio" name="oldschool[]" value="Нет" onclick="if(this.checked) {document.getElementById('nextSibling').style.display='none'; document.getElementById('nextSibling').value='';}"><label for="uchnet" class="blocktitle2">Нет</label><br/></p> Подскажите пожалуйста, а то уже мозг вывернулся на изнанку) как сделать проверку заполнения поля: <input type="text" size="33" name="kakiekurse" placeholder="Вопрос при выборе Да" style="display: none;" id="nextSibling"> |
<form action="/"> <input type="text" size="33" name="kakiekurse" placeholder="Вопрос при выборе Да" required="true" /> <button type="submit">Заслать</button> </form> |
Цитата:
|
Цитата:
сразу не заметил, но теперь при выборе "нет" - форма не отправляется |
помогите плззз
|
1baddog1,
:write: конечно лучше сделать отдельную функцию а не пихать в разметку... <!DOCTYPE HTML> <html> <head> <title>Untitled</title> <meta charset="utf-8"> </head> <body><form action="http://"> <p><label for="uchilsya" class="blocktitle2">Вопрос?</label></p> <p><input type="radio" name="oldschool[]" value="Да" eform="Проверка выбора инпутов::1:" onclick="if(this.checked){document.getElementById('nextSibling').style.display='inline-block';document.getElementById('nextSibling').required='true'}else {document.getElementById('nextSibling').style.display='none'; document.getElementById('nextSibling').value='';}" class="blocktitle2"><label for="uchda" class="blocktitle2">Да</label> <input type="text" size="33" name="kakiekurse" placeholder="Вопрос при выборе Да" style="display: none;" id="nextSibling" > <br/> <input type="radio" checked="checked" name="oldschool[]" value="Нет" onclick="if(this.checked) {document.getElementById('nextSibling').style.display='none'; document.getElementById('nextSibling').value='';document.getElementById('nextSibling').required=''}"><label for="uchnet" class="blocktitle2">Нет</label><br/></p> <button type="submit">Заслать</button> </form> </body> </html> |
Большое спасибо
|
Часовой пояс GMT +3, время: 14:04. |