Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   onclick и условие else if (https://javascript.ru/forum/dom-window/53414-onclick-i-uslovie-else-if.html)

Navilsor 03.02.2015 12:29

onclick и условие else if
 
Добрый день. Помогите связать onclick и else if. Скрипт рабочий, но сильно не ругайте. При клике на картинку нужно вывести число в переменную "xmodel". Вешать на каждый onclick свой обработчик громоздко и глупо. Хочется поместить все в один обработчик, который работал с условием else if, но не знаю как. :)

<script language="JavaScript">

function calc()
{
    var model1 =10;
    xmodel.innerHTML = model1; 
};

function calc2()
{
    var model2 =20;
    xmodel.innerHTML = model2; 
};

function calc3()
{
    var model3 =30;
    xmodel.innerHTML = model3; 
};


</script>

<body>

<img src="simple1.jpg" onclick="calc();" id="image1" border="2"/>
<img src="simple2.jpg" onclick="calc2();" id="image2" border="2"/>
<img src="simple3.jpg" onclick="calc3();" id="image3" border="2"/>

<td> Значение:<span id="xmodel">0</span> руб.</td>

</body>

рони 03.02.2015 12:45

Navilsor,
http://learn.javascript.ru/event-delegation

рони 03.02.2015 12:59

Navilsor,
<!DOCTYPE HTML>
<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <script>
document.onclick = function (a) {
    var a = a || window.event,
        a = a.target || a.srcElement,
        b = a.parentNode;
    if (a.nodeName.toLowerCase() == "img") {
        for (var c = 0, a = a.previousSibling; a && a != b;)
        a.nodeName.toLowerCase() == "img" && c++, a = a.previousSibling;
        xmodel.innerHTML = [10, 20, 30][c]
    }

};
</script>
</head>
<body>
<img src="simple1.jpg" id="image1" border="2"/>
<img src="simple2.jpg" id="image2" border="2"/>
<img src="simple3.jpg" id="image3" border="2"/>
<td> Значение:<span id="xmodel">0</span> руб.</td>
</body>
</html>

ksa 03.02.2015 13:23

Цитата:

Сообщение от Navilsor
Хочется поместить все в один обработчик

Мои 5коп... :)

<!DOCTYPE html>
<html ng-app>
<head>
<script src='http://code.jquery.com/jquery-latest.js'></script>
<!--
<script src="http://code.angularjs.org/1.1.4/angular.min.js"></script>
<link rel='stylesheet type=text/css href=tmp.css' />
-->
<style type='text/css'>
</style>
<script type='text/javascript'>
$(function (){
	$('.image').click(function (){
		$('#xmodel').text($(this).data('value'));
	});
});
</script>
</head>
<body> 
<img src="simple1.jpg" id="image1" class='image' data-value='10' border="2"/>
<img src="simple2.jpg" id="image2" class='image' data-value='20' border="2"/>
<img src="simple3.jpg" id="image3" class='image' data-value='30' border="2"/>
<p>Значение:<span id="xmodel">0</span> руб.</p>
</body>
</html>

Navilsor 03.02.2015 17:18

рони, благодарствую за помощь.

Но что если на странице есть еще img, которые должны обрабатываться таким же обработчиком все зависимости от первого? Тогда второй обработчик будет менять img первого. Как избежать? Как разграничить их действия не зависимо друг от друга?

Navilsor 03.02.2015 17:25

Извиняюсь, разобрался сам :)

Меняем обработчик страницы document.onclick = function (a) на обработчик function calc(), пишем onclick="calc();" в картинке и готово.

рони 03.02.2015 17:39

Navilsor,
не понял ни вопроса ни решения - но раз разобрался тоды ок!

Navilsor 04.02.2015 07:31

:)

Navilsor 05.02.2015 08:15

Хочу что-бы в условии if , выполнялось другое условие if, например изменялось толщина border вокруг элемента. Переменную беру из первого условия, в блоке присваиваю border="0". Что не так?

<!DOCTYPE HTML>
<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <script>
document.onclick = function (a) {
    var a = a || window.event,
        a = a.target || a.srcElement,
        b = a.parentNode;
    if (a.nodeName.toLowerCase() == "img") {
        for (var c = 0, a = a.previousSibling; a && a != b;)
        a.nodeName.toLowerCase() == "img" && c++, a = a.previousSibling;
        xmodel.innerHTML = [10, 20, 30][c]
          var border0 = xmodel.innerHTML;
              if  (border0 = 10)
                {
                  <img src="simple1.jpg" id="image1" border="2"/>
                  <img src="simple2.jpg" id="image1" border="0"/>
                  <img src="simple3.jpg" id="image1" border="0"/>
                }
              else
                 if  (border0 = 20)
                 {
                  <img src="simple1.jpg" id="image1" border="0"/>
                  <img src="simple2.jpg" id="image1" border="2"/>
                  <img src="simple3.jpg" id="image1" border="0"/>
                 }
                 else
                 {
                  <img src="simple2.jpg" id="image1" border="0"/>
                  <img src="simple2.jpg" id="image1" border="0"/>
                  <img src="simple3.jpg" id="image1" border="2"/>
                 };
                
              };
    }

};
</script>
</head>
<body>
<img src="simple1.jpg" id="image1" border="0"/>
<img src="simple2.jpg" id="image2" border="0"/>
<img src="simple3.jpg" id="image3" border="0"/>
<td> Значение:<span id="xmodel">0</span> руб.</td>
</body>
</html>

ksa 05.02.2015 08:22

Цитата:

Сообщение от Navilsor
в блоке присваиваю border="0". Что не так?

Это вообще какой язык (с 16 по 36)? :blink:


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