Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   ошибка в реализации (https://javascript.ru/forum/events/37695-oshibka-v-realizacii.html)

RodgerFox 02.05.2013 16:37

ошибка в реализации
 
Добрый день, уважаемые пользователи форума.
Подскажите пожалуйста, что я делаю не так.
Есть ссылка, при нажатии появляется соседний блок, при нажатии опять на ссылку или вне появившегося блока он должен прятаться, ну все как обычно. Только прячется он почему то, только при повторном нажатии на ссылку.
Листинг:
$(document).ready(function(){

var button = $('#logina');
        var box = $('#container');
        var form = $('#loginForm');
button.removeAttr('href');
$("a#logina").click(function (login) {
   box.toggle();
                box.addClass("act-box");
                button.addClass('active');
        
});
        form.click(function() { 
                return false;
        });
//вот тут что то не так. условие, типа нажатие вне области блока формы, то закрытие. 
        $(this).click(function(login) {
                if(!($(login.target).parent('#logina').length > 0)) {
                        button.removeClass('active');
                        box.toogle();
                        box.removeClass("act-box");
                }
        });
});


И сама шатамэлочка:

<a href="#" id="logina">login</a>
  <div id="container">
<form id="loginForm">
<h2>hellow, world</h2>
</form>
  </div>


p.s. убираем атрибут href ибо если js работает в браузере то пусть открывает форму, если нет, как обычная ссылка на другую стр.
Подскажите пожалуйста, что делаю не так? >.<

cyber 02.05.2013 19:28

RodgerFox, может потому что вы не обрабатывает клик в не блока?)

RodgerFox 02.05.2013 22:20

Простите, не понял. там в 17 строчке, я как бы обращаюсь к функции логин, а дальше проверка в ней был клик или нет, если нет то исп toogle();

cyber 02.05.2013 22:49

RodgerFox, сори не увидел что this ,в данном случае это документ, мне привычней чистый js, щас глянем)

cyber 02.05.2013 22:57

RodgerFox,
я конечно не особо шарю в jquery но метод вроде toggle а не toоgle

RodgerFox 04.05.2013 13:15

все равно, не как =\

cyber 04.05.2013 14:14

сделал пример на чистом js
<!DOCTYPE HTML>
<html>
  <head>
    <style>
      .open {
          display:block;
        
        }
        
        
        .close{
       
            display:none;
          
          }
    
    </style>
    
  </head>
  <body>
<a href="#" id="login">login</a>
  <div id="container">
<form id="loginForm">
<h2>hellow, world</h2>
</form>
  </div>
    <script>

      function $(selector){//используеться что бы не писать document.getElement...
      
      return document.querySelector(selector);
      
      }  
    
      
      !function () {
      
      
      
        var cont = $("#container");
        cont.className = "open";
        
        
        document.body.onclick = function (e) {
        
        
          var target = event.srcElement||e.target  ;
        
          
          if(target.id == "login"){
          
            ChangeStateContainer();
          
            return false;
          }
          
          
          cont.className = "close";
        };
      
      
        function ChangeStateContainer()
        {
        
          if(cont.className == "open"){
        
            cont.className = "close";
          }
          
          else cont.className = "open";
        
        }
      
      }();


    </script>

  </body>
</html>

Hekumok 04.05.2013 22:11

$(this).click(function(login) {
		if(!($(login.target).closest("#logina").length)) {
			button.removeClass('active');
			box.toogle();
			box.removeClass("act-box");
		};
	});


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