Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Реализация без jQuery (https://javascript.ru/forum/dom-window/43870-realizaciya-bez-jquery.html)

IndigoHollow 24.12.2013 16:33

Реализация без jQuery
 
Есть скрипт, который показывает блоки при выборе определенного пункта select. Но он работает только с включенной библиотекой jQuery. Можно ли как-то реализовать то же самое без jQuery?
Это нужно, т.к. происходит очередной банальный конфликт библиотек, который я никак не могу отследить. С noConflict я как-то не подружился.

<!DOCTYPE html>

<html>

<head>
	<script src="http://code.jquery.com/jquery-latest.js"></script>
 
	<script type="text/javascript">
		$(document).ready(function(){
			$('#selecter1').click(function(){
				document.getElementById("block1").style.display = "none";
				document.getElementById("block2").style.display = "none";
			});
			$('#selecter2').click(function(){
				document.getElementById("block1").style.display = "block";
				document.getElementById("block2").style.display = "none";
			});
			$('#selecter3').click(function(){
				document.getElementById("block1").style.display = "none";
				document.getElementById("block2").style.display = "block";
			});
		});
	</script>
</head>

<body>

	<select name="menu" size="1">
	  <option name="type" value="0" id="selecter1" select="selected">&nbsp;</option>
	  <option name="type" value="1" id="selecter2">Фундамент</option>
	  <option name="type" value="2" id="selecter3">Перекрытия 1-го этажа</option>
	</select>
	
	<div id="block1" style="display:none;">БЛОК 1</div>
	<div id="block2" style="display:none;">БЛОК 2</div>

</body>

</html>

Яростный Меч 24.12.2013 16:40

вместо $(document).ready(function(){}) использовать window.onload = function(){}
вместо $('#selecter1')click(function(){}) - document.getElementById("selecter1").onclick = function(){}

IndigoHollow 24.12.2013 16:59

Цитата:

Сообщение от Яростный Меч (Сообщение 288940)
вместо $(document).ready(function(){}) использовать window.onload = function(){}
вместо $('#selecter1')click(function(){}) - document.getElementById("selecter1").onclick = function(){}

К сожалению такой вариант не работает - блоки не выводятся

<!DOCTYPE html>

<html>

<head>
	<!--<script src="http://code.jquery.com/jquery-latest.js"></script>-->
 
	<script type="text/javascript">
		window.onload = function(){
			document.getElementById("selecter1").onClick = function(){
				document.getElementById("block1").style.display = "none";
				document.getElementById("block2").style.display = "none";
			});
			document.getElementById("selecter2").onClick = function(){
				document.getElementById("block1").style.display = "block";
				document.getElementById("block2").style.display = "none";
			});
			document.getElementById("selecter3").onClick = function(){
				document.getElementById("block1").style.display = "none";
				document.getElementById("block2").style.display = "block";
			});
		});
	</script>
</head>

<body>

	<select name="menu" size="1">
	  <option name="type" value="0" id="selecter1" select="selected">&nbsp;</option>
	  <option name="type" value="1" id="selecter2">Фундамент</option>
	  <option name="type" value="2" id="selecter3">Перекрытия 1-го этажа</option>
	</select>
	
	<div id="block1" style="display:none;">БЛОК 1</div>
	<div id="block2" style="display:none;">БЛОК 2</div>

</body>

</html>

Яростный Меч 24.12.2013 17:03

IndigoHollow,

ощути разницу между словами "onclick" и "onClick"
найди 10 отличий.

рони 24.12.2013 17:04

IndigoHollow,
круглые скобки неубраны и клик по option это суперхит!!!

IndigoHollow 24.12.2013 17:05

Цитата:

Сообщение от Яростный Меч (Сообщение 288950)
IndigoHollow,

ощути разницу между словами "onclick" и "onClick"
найди 10 отличий.

Ощутил еще в первый раз. Оба варианта не работают

IndigoHollow 24.12.2013 17:14

Цитата:

Сообщение от рони (Сообщение 288951)
IndigoHollow,
круглые скобки неубраны и клик по option это суперхит!!!

Спасибо, добрый человек! Всегда меня выручаешь!

А не знаешь как решить вот эту проблему?
http://javascript.ru/forum/showthrea...499#post286499

рони 24.12.2013 17:20

IndigoHollow,
<!DOCTYPE html>

<html>
<head>
  <meta charset="utf-8">
  <script type="text/javascript">
     window.onload = function () {
    var b = document.querySelector("select"),
        c = document.querySelectorAll("div");
    b.onchange = function () {
        for (var b = this.value - 1, a = 0; a < c.length; a++) c[a].style.display = a != b ? "none" : "block"
    }
  };
  </script>

  <title></title>
</head>

<body>
  <select name="menu" size="1">
    <option name="type" value="0" id="selecter1" select="selected">

    </option>

    <option name="type" value="1" id="selecter2">
      Фундамент
    </option>

    <option name="type" value="2" id="selecter3">
      Перекрытия 1-го этажа
    </option>
  </select>

  <div id="block1" style="display:none;">
    БЛОК 1
  </div>

  <div id="block2" style="display:none;">
    БЛОК 2
  </div>
</body>
</html>

danik.js 24.12.2013 17:38

Мой вариант, потопорнее. У рони, покомпактнее, нужно только селекторы по классу использовать и дать имена нормальные переменным (кстати, не обижайся если начну ставить минусы за твои a,b,c - реально напрягает когда читаешь код).

<!DOCTYPE html>
 
<html>
 
<head>
    <!--<script src="http://code.jquery.com/jquery-latest.js"></script>-->
</head>
 
<body>
 
    <select name="menu" size="1" id="select">
      <option name="type" value="0" select="selected">&nbsp;</option>
      <option name="type" value="1">Фундамент</option>
      <option name="type" value="2">Перекрытия 1-го этажа</option>
    </select>
     
    <div id="block1" style="display:none;">БЛОК 1</div>
    <div id="block2" style="display:none;">БЛОК 2</div>
  
    <script>
        (function(){
            var select = document.getElementById("select")
            var block1 = document.getElementById("block1");
            var block2 = document.getElementById("block2");;
            var toggle = function(show1, show2) {
                block1.style.display = show1 ? "block" : "none";
                block2.style.display = show2 ? "block" : "none";
            }
            select.onchange = function() {
                toggle(this.value == 1, this.value == 2);
            };
        })()
    </script>
</body>
 
</html>


Рекомендую не ждать onload события - проще опустить скрипт вниз, когда все элементы уже доступны.

рони 24.12.2013 17:56

danik.js,
Цитата:

Сообщение от danik.js
кстати, не обижайся если начну ставить минусы за твои

Цитата:

Сообщение от danik.js
var states = [[false, false], [true, false], [false, true]]; toggle.apply(null, states[this.value]);

Цитата:

Сообщение от danik.js
реально напрягает когда читаешь код

!!!


Часовой пояс GMT +3, время: 08:50.