【问题标题】:javascript How to get two toggles on a page to work independentlyjavascript 如何让页面上的两个切换独立工作
【发布时间】:2015-09-29 04:57:29
【问题描述】:

您好,我目前有两个切换开关,一个在侧边栏,一个在主体中。他们目前一起工作很烦人,即使我正在使用不同的脚本。我目前用于切换的脚本几乎相同,但是,即使使用完全不同的脚本,它们仍然可以一起工作。

我所说的协同工作的意思是当我单击主体上的切换时,侧栏切换会做出反应。 它们是在 oclick 上折叠的切换开关。

<script>
        var divs = ["Menu", "Add"];
        var visibleDivId = null;

        function toggleVisibility(divId) {
            if(visibleDivId === divId) {
                visibleDivId = null;
            } else {
                visibleDivId = divId;
            }
            

            hideNonVisibleDivs();
        }

        function hideNonVisibleDivs() {
            var i, divId, div;

            for(i = 0; i < divs.length; i++) {
                divId = divs[i];
                div = document.getElementById(divId);

                if(visibleDivId === divId) {
                    div.style.display = "block";
                } else {
                    div.style.display = "none";
                }
            }
        }
    </script>
    
     <script>
        $(document).ready(function () {
            // set up the click event
            $('.body > a').on('click', function(){
                $(this).next('div').siblings('div:not(#Menu)').hide("1");
            });
            // trigger orders which has id francc, not orders // .show("1") goes between $(this).next('div') + .siblings 
            // if i want a transition
            $('#Menu').trigger('click');
            // options include >>>, but it's slower // $('a[name="account"]').trigger('click');
        });
                
    </script>

   <!--  sidebar  toggle-->
    <script>
        var divs = ["Order", "Rest", "Franc"];
        var visibleDivId = null;

        function toggleVisibility(divId) {
            if(visibleDivId === divId) {
                visibleDivId = null;
            } else {
                visibleDivId = divId;
            }
            

            hideNonVisibleDivs();
        }

        function hideNonVisibleDivs() {
            var i, divId, div;

            for(i = 0; i < divs.length; i++) {
                divId = divs[i];
                div = document.getElementById(divId);

                if(visibleDivId === divId) {
                    div.style.display = "block";
                } else {
                    div.style.display = "none";
                }
            }
        }
    </script>

    <!--    Change color on click-->

    <script>
        $(document).ready(function() { 
            $('.sidebar h3').on('click', function() {
                $('.sidebar h3').css('color', 'black');
                $(this).css('color', 'red');
            });
            $('h3#open').trigger('click');  //Your account red on page load
        });
    </script>


    <!--Your account toggle open on load    -->
    <script>
        $(document).ready(function () {
            // set up the click event
            $('.sidebar > a').on('click', function(){
                $(this).next('div').siblings('div:not(#Franc)').hide("1");
            });
            // trigger orders which has id francc, not orders // .show("1") goes between $(this).next('div') + .siblings 
            // if i want a transition
            $('#francc').trigger('click');
            // options include >>>, but it's slower // $('a[name="account"]').trigger('click');
        });
                
    </script>
<div class="sidebar">

            <!--             Orders toggle-->

            <a  id="order" class="header" href="#" onclick="toggleVisibility('Order');"><h3 id="orderr">Orders</h3></a>
            <div id="Order" style="display: none;">    
                <div>
                    <ul class="tabs">
                        <li id="order" class="Red"><a href="Franchise-account-orders.php">Overview</a></li>
                      </ul>
                </div>
            </div>


            <!--Restaurant toggle-->
            <a id="restt" class ="header"href="#" onclick="toggleVisibility('Rest');"><h3>Your Restaurants</h3></a>
            <div id="Rest" style="display: none;"><div>

                    <ul class="tabs">
                        <!--                    <li id="order" class="rred"><a href="Franchise-account-orders.php">restaurant</a></li>-->
                        <li id="order" class="rgreen"><a href="Franchise-account-orders.php">New restaurant</a></li>

                    </ul>

                </div>
            </div>



            <!--            Account toggle-->
            <a id="francc" name="account" class ="header" href="#" onclick="toggleVisibility('Franc');"><h3 id="open">Your Account</h3></a>
            <div id="Franc" style="display: none;">
                <div>
                    <ul class="tabs">
                      <li id="order" class="Blue" ><a href="admin_panel.php">Order History</a></li>
                    </ul>
                </div>
            </div>
        </div>

<div id=body>
            <!--    Menu toggle      -->
            <div class="container_head">  <!--            red header top of container-->
                <a  id="Menu" class="header" href="#" onclick="toggleVisibility('Menu');"><h3>Menu Section</h3></a>
            </div>
            <div id="Menu_form" style="display: none;">   

                <form id="MenuForm" action ="javascript:void(0);" method="POST">
<!--                    <div class="field">-->
                        <label for="Name">Name</label>
                        <input type="text" name="Name" id="Name" placeholder="Steaks pattern="[a-zA-Z]" 
                               required tabindex="1">
                        <br>

                        <label for="Description">Description</label>
                        <input type="text" name="Description" id="Description" placeholder="Fresh USDA Choice steaks, seasoned with hickory-smoked sea salt." tabindex="2">

                        <br>
                        
                         <div class="field">
                    <input type="submit"  value="Save">
                </div>
                        </form>
                    </div>
                                                      <a  id="add_prod" class="header" href="#" onclick="toggleVisibility('Add');"><h3>Orders</h3></a>
            <div id="add" style="display: none;">    

            </div>

【问题讨论】:

  • 附注,ID 必须是唯一的。
  • 请删除任何与问题无关的代码。同样令人困惑的是为什么您似乎重复了相同的函数声明。具有最少 css 的现场演示会很有帮助
  • 你需要给你的函数起唯一的名字。你怎么知道你触发的是哪一个?
  • 你不能在一个页面中放置两次脚本并期望它能够工作......这告诉我你并不真正理解脚本在做什么。此代码的另一个问题是您将当前可见的项目存储在单个全局变量中。这意味着您不能在同一页面上有两个手风琴(这通常称为手风琴,是的)。您可以将数据存储在类、名称或数据属性中。
  • 他们有唯一的名字ime menu, order, francc etc :s。这些 ID 仅用于试验和错误,并将在以后删除。我是新手,所以不,我不太清楚我寻求帮助的原因

标签: javascript jquery html toggle


【解决方案1】:

结合@j08691 和 Leo Farmer 的 cmets,您需要拥有唯一的 ID 和函数名称。当您调用toggleVisibility(...) 时,它将调用该方法的第二个声明。此外,当您在“订单”之类的内容上调用 document.getElementById(...) 时,它会在它找到的第一个实例处停止(在您的情况下,是 a 标记)。

为您的函数指定唯一名称,为您的项目指定唯一 ID(如果您希望它们都做同样的事情,您可以考虑为每个项目使用相同的 class),您应该在一个更好的地方。

【讨论】:

  • 您好,谢谢。它们确实有独特的名称,即订单、法郎和菜单。切换调用这些
  • 每个元素都需要有一个唯一的ID。这意味着您不能有一个a 标签、一个div 标签和一个li 标签都具有相同的ID。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-25
  • 1970-01-01
相关资源
最近更新 更多