【问题标题】:toggle menu not working JQuery切换菜单不起作用 JQuery
【发布时间】:2017-01-29 01:39:44
【问题描述】:

我的网站有登录系统。当menu被点击且用户未登录时,showpopup()函数将被调用并显示一个注册表单。

menu被点击并且用户登录时,它将显示dropdownafterlogin()将被调用。

问题是,我想在点击menu 时切换dropdown。但是一旦dropdown 打开,我只能在dropdowndropdownA 之外单击时关闭dropdown

如何通过单击menu 来切换/关闭dropdown

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

    }
}

【问题讨论】:

    标签: javascript php jquery drop-down-menu toggle


    【解决方案1】:

    试试这样。调用函数form$.post()done方法。

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

    而在 php 中只需返回 truefalse..

    <?php
    ob_start();
    session_start();
    include_once('database.php');
    
    if(isset($_SESSION['username'])){
        echo  true;
    
    }
    if (!(isset($_SESSION['username']))){
    
        echo false;
    }
    ob_end_flush(); 
    ?>
    

    有关更多信息,请参阅文档https://api.jquery.com/jquery.post/

    【讨论】:

    • function(data) { }).done(function(data){ 这种格式是正确的格式吗?我根据你的更改了我的代码,现在它没有显示dropdown 菜单。它只是刷新页面。
    • 我刚刚做了,现在我明白 .done() 是为了成功。但每当我点击menu 时,它仍然会刷新页面。它不调用showpopup()afterlogin()。所以如果我使用.done(),它会刷新页面并且不做任何事情
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-04
    • 1970-01-01
    • 1970-01-01
    • 2022-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多