2017-01-29 3 views
1

Мой сайт имеет систему входа в систему. Когда нажата кнопка menu, и пользователь не войдет в систему, будет вызываться функция showpopup(), и она отобразит форму для регистрации.Меню переключения не работает JQuery

Когда menu нажата, и пользователь авторизованы, он покажет dropdown и afterlogin() будет называться.

вещь есть, хотел бы переключиться dropdown если menu щелкнул. Но один раз dropdown открыт, я могу закрыть dropdown ТОЛЬКО, когда я выхожу за пределы dropdown или dropdownA.

Как переключить/закрыть dropdown, нажав menu?

index.php

<div id="menu">Menu</div> 

<div id="dropdown"> //this drop down is hidden 
    <a href="#" id="a">A</a> 
</div> 

<div id="dropdownA"> //this drop down is also hidden 
    <p>Hello</p> 
</div> 

login.php

<?php 
ob_start(); 
session_start(); 
include_once('database.php'); 

if(isset($_SESSION['username'])){ 
    echo '1'; 
return false; 
} 
if (!(isset($_SESSION['username']))){ 
    echo '0'; 
return false; 
} 
ob_end_flush(); 
?> 

script.js

$('#menu').click(function (e) { 
    e.preventDefault(); 
    e.stopPropagation(); 

    $.post("login.php", function(data) { 

     if(data == "1"){ 
      afterLogin(); 
      return false; 
     } else if(data == "0"){ 
      showpopup(); 
      return false; 
     } 
    }); 

}); 

function showpopup() 
{//sign up form 
$("#signupForm").fadeIn(); 
$("#signupForm").css({"visibility":"visible","display":"block"}); 
} 


function afterLogin() { 
    $('#menu').on('click', function() { 

     $("#dropdown").show(function(){ 
      document.body.addEventListener('click', boxCloser, false); 
     }); 

    }); 

    $("#a").click(function() { 
     $("#dropdownA").toggle(); 
    }); 

    function boxCloser(e){ 
     if(!$(e.target).closest('#dropdown, #dropdownA').length){ 
     document.body.removeEventListener('click', boxCloser, false); 
     $('#dropdown, #dropdownA').hide(); 
     } 

    } 
} 

ответ

0

Попробуйте как this.Call к functi ons форма $.post() производства способ.

$.post("login.php", function(data) { 
    }).done(function(data){ 
     if(data === true){ 
      afterLogin(); 

     } else if(data === false){ 
      showpopup(); 

     } 
    }); 

И в РНР просто вернуть true или false ..

<?php 
ob_start(); 
session_start(); 
include_once('database.php'); 

if(isset($_SESSION['username'])){ 
    echo true; 

} 
if (!(isset($_SESSION['username']))){ 

    echo false; 
} 
ob_end_flush(); 
?> 

подробнее см Docs https://api.jquery.com/jquery.post/

+0

является 'функция (данные) {}). Done (функция (данные) {' этот формат в правильном формате? Я изменил свой код в соответствии с вашим, и теперь он не показывает меню «выпадающего меню», оно только обновляет страницу. –

+0

вы видели, как docs..i связались в ответе? –

+0

Я просто сделал и Теперь я понимаю, что .done () для успеха. Но он все еще обновляет страницу всякий раз, когда я нажимаю «меню». он не вызывает 'showpopup()' или 'afterlogin()'. Поэтому, если я использую '.done()', он обновляет страницу и ничего не делает –

Смежные вопросы