Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Люди, подскажите, пожалуйста обработчик (https://javascript.ru/forum/events/61181-lyudi-podskazhite-pozhalujjsta-obrabotchik.html)

Макsiм 07.02.2016 20:48

Люди, подскажите, пожалуйста обработчик
 
Скорее всего мой случай очень простой, но я уже несколько дней ломаю голову)
Я использую метод on() потому что элементы, которые слушают событие, должны так же слушать события
на других элементах, поэтому addEventListener здесь не катит. Подскажите, пожалуйста, как сделать
чтобы обработчик срабатывал постоянно?
Вот то, о чем я говорю - обработчик срабатывает, к сожалению, только два раза:
$('#wrapper').children().children().on("click", "div.listener", function(e) {
$( "div.listener" ).css("display", "none");
$( "#clicker" ).bind("click", function(e) {
$( "div.listener" ).css("display", "block");
})
});
$( "#clicker" ).bind("click", function(e) {
$( "div.listener" ).trigger("click");
});
Вот весь код целиком - можно запустить для наглядности:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Документ без названия</title>
<script src="js/jquery-1.11.3.js"></script>
<script type="text/javascript">

$(document).ready(function(){

var allFormBlocks = document.getElementsByClassName("formblock");
var hiddenArr = $(allFormBlocks);
hiddenArr.slice(1).hide();

$("div.listener").css("color", "red");

$('#wrapper').children().children().on("click", "div.listener", function(e) {
$( "div.listener" ).css("display", "none");
$( "#clicker" ).bind("click", function(e) {
$( "div.listener" ).css("display", "block");
})
});
$( "#clicker" ).bind("click", function(e) {
$( "div.listener" ).trigger("click");
});

$('#button1').bind("click", function(e){//конец блока1 следующий раздел
$('#block1').hide();
$('#block2').show();
});


$('#button2').bind("click", function(e){//конец блока2 следующий раздел
$('#block2').hide();
$('#block3').show();
});

$('#button3').bind("click", function(e){//конец блока2 предыдущий раздел
$('#block2').hide();
$('#block1').show();
});
$('#button4').bind("click", function(e){//конец блока3 предыдущий раздел
$('#block3').hide();
$('#block2').show();
});
});



</script>
</head>
<body>

<div id="wrapper">
<div class="testform">
<form method="POST" name="form">

<div class="formblock" id="block1">
<h1>Это блок №1</h1>
<div>
<p><label><input id="clicker" type="checkbox" name="npo" value="0">скрыть некоторые элементы<label></p>
</div>
<div>DIV блока №1</div>
<div class="listener">Это тоже DIV блока №1</div>
<div>и это тоже DIV блока №1</div>
<button type="button" id="button1">следующий раздел</button>
</div>
<div class="formblock" id="block2">
<h1>Это блок №2</h1>
<div>DIV блока №2</div>
<div class="listener">Это тоже DIV блока №2</div>
<div>и это тоже DIV блока №2</div>
<button type="button" id="button2">следующий раздел</button></br>
<button type="button" id="button3">предыдущий раздел</button>
</div>
<div class="formblock" id="block3">
<h1>Это блок №3</h1>
<div>DIV блока №3</div>
<div class="listener">Это тоже DIV блока №3</div>
<div>и это тоже DIV блока №3</div>
<button type="button" id="button4">предыдущий раздел</button>
</div>
</form>
</div>
</div>
</body>
</html>

рони 07.02.2016 20:58

Макsiм,
Пожалуйста, отформатируйте свой код!

Для этого его можно заключить в специальные теги: js/css/html и т.п., например:
[js]
... ваш код...
[/js]


О том, как вставить в сообщение исполняемый javascript и html-код, а также о дополнительных возможностях форматирования - читайте http://javascript.ru/formatting.

рони 07.02.2016 21:00

Макsiм,
на всякий случай забейте в поиск по форуму открывашка, может это то что вам нужно

DynkanMaclaud 08.02.2016 13:10

Макsiм,
объясните что вы хотите реализовать, а то я ничего не понял...(((

DynkanMaclaud 08.02.2016 18:43

рони,
<!DOCTYPE html>
<html>
<head>
  <title></title>
<script type="text/javascript">
var _click = function () {
        var b = 1;
        return function (c) {
            var a = document.getElementById("item" + b);
            c == b && (a.style.display = "none" == a.style.display ? "" : "none");
            c != b && (a.style.display = "none", a = document.getElementById("item" + c), a.style.display = "", b = c)
        }
    }();
window.onload = function() {
    _click(1)
 }
</script>
</head>

<body>
<a onclick="_click(1); return false;" href="#">1</a>
<a onclick="_click(2); return false;" href="#">2</a>
<a onclick="_click(3); return false;" href="#">3</a>


<div style=" display:none" id="item1">div1</div>
<div style=" display:none" id="item2">div2</div>
<div style=" display:none" id="item3">div3</div>

</body>
</html>

Ну ты тут написал конечно))))) вникнуть не могу((***

рони 08.02.2016 18:55

DynkanMaclaud,
главное работет :lol:

рони 08.02.2016 19:00

DynkanMaclaud,
строка 10 если жмём прежнюю ссылку -- меняет видимость только у его блока,
строка 11 если ссылка другая -- старый блок закрываем , находим новый и открываем , сохраняем то на чего нажали в темп


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