2017-01-29 4 views
1

Meine Website hat Login-System. Wenn menu geklickt wird und der Benutzer nicht angemeldet ist, wird showpopup() Funktion aufgerufen und es wird ein Anmeldeformular angezeigt.Toggle-Menü funktioniert nicht JQuery

Wenn menu geklickt wird und der Benutzer ist angemeldet, es dropdown zeigen und afterlogin() aufgerufen.

die Sache ist, möchte ich dropdown umschalten, wenn menu geklickt wird. Aber einmal dropdown ist offen, kann ich dropdown NUR schließen, wenn ich außerhalb von entweder dropdown oder dropdownA klicke.

Wie kann ich dropdown umschalten/schließen, indem ich auf menu klicke?

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(); 
     } 

    } 
} 

Antwort

0

wie this.Call Versuchen Sie functi ons Form $.post() getan Methode.

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

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

     } 
    }); 

Und in PHP nur true oder false zurückkehren ..

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

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

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

    echo false; 
} 
ob_end_flush(); 
?> 

Mehr siehe docs https://api.jquery.com/jquery.post/

+0

ist 'Funktion (Daten) {}). Done (function (data) {' dieses Format ein richtiges Format? Ich änderte meinen Code entsprechend Ihrem und jetzt zeigt es nicht ein "Dropdown" Menü. es aktualisiert nur die Seite. –

+0

haben Sie docs... haben in der Antwort verbunden? –

+0

ich tat gerade und Ich verstehe jetzt, dass .done () ist für den Erfolg. Aber es aktualisiert die Seite immer noch, wenn ich auf "Menü" klicke. Es ruft nicht 'showpopup()' oder 'afterlogin()' auf. Wenn ich '.done()' verwende, wird die Seite aktualisiert und nichts getan –