【问题标题】:Issue with jQuery show/hidejQuery显示/隐藏问题
【发布时间】:2017-11-24 16:56:22
【问题描述】:

我编写了一个脚本来从可点击的地图中获取输入,并使用该数据来显示或隐藏隐藏在包装器 div 中的数据集合。该脚本并没有真正起作用,我不确定我做错了什么。脚本如下供参考:

    function createCallback( i ){
  return function(){
    jQuery(".stateText").addClass("hidden");
    jQuery("#st_" + i + "-1").toggleClass("hidden");
  };
};

jQuery(document).ready(function ($) {
    for (let i = 1; i < 50; i++) {
        $("#st_" + i).click( createCallback(i) );

                    };
                    });

我的推理背后的想法是,该脚本迭代了 50 个州,这些州分配了与其字母顺序相对应的 ID(例如 Alabama = st_1 等)。

每个状态的每个数据都以具有唯一 ID(形式为 st_i-1)的隐藏元素开始。当事件触发时,它应该隐藏所有其他具有“statetext”类的元素,然后切换所选元素的类。

以下是显示/隐藏 div 的代码示例:

<div id="data-area">
           <div id="st_1-1" class="statetext hidden">
                <h4>Alabama</h4>
                <ul class="experience-list">
                <li>Right of Way Land Services (Pipeline, Transmission, Telecommunications)</li>
                <li>Mineral Property Management</li>
                </ul>
                <h4>Recent Projects</h4>
                <ul class="experience-list">
                <li>500+ mile multistate FERC pipeline</li>
                <li>700+ mile multistate FERC pipeline</li>
                <li>270+ mile multistate FERC pipeline</li>
                </ul>
            </div>

实际应用程序无法正常运行。单击事件通常不会触发,并且其他 div 没有添加“隐藏”类。

我在这里做错了什么?

【问题讨论】:

    标签: javascript jquery html css maps


    【解决方案1】:

    我不确定我是否理解你的问题,但这部分对我来说并不正确。

    <div id="st_1-1" class="statetext hidden">
    

    具有 ID st_1-1(避免在 ID 中使用下划线以外的特殊字符)

    $("#st_" + i).click( createCallback(i) );
    

    这将评估为 st_1

    st_1-1st_1

    不同

    我希望这会缩小您的解决方案 :)

    【讨论】:

    • 哦,很抱歉,不清楚。单击地图触发的 ID 和关联文本的 ID 不同(因为它们必须不同)。地图点击的 ID 为 st_1,关联数据的 ID 为 st_1-1。
    • Hyphens in IDs are perfectly legal in HTML5。实际上。它们在 HTML4 中也是合法的;它是在 HTML4 中无效的其他特殊字符。
    【解决方案2】:

    您可以尝试将返回的函数变成 iife:

    所以而不是:

    function(){
        jQuery(".stateText").addClass("hidden");
        jQuery("#st_" + i + "-1").toggleClass("hidden");
      };
    

    你可以这样做:

    (function(){
        jQuery(".stateText").addClass("hidden");
        jQuery("#st_" + i + "-1").toggleClass("hidden");
      }());
    

    至少这样你就可以确定你的函数无论如何都会被调用。

    【讨论】:

    • 这会引发错误。我很确定 }());需要是 })();无论如何,它仍然不起作用,因为这只会强制显示所有项目。最大的问题是所有其他元素的隐藏不起作用,我一辈子都无法弄清楚原因。
    【解决方案3】:

    编辑:jQuery(".stateText")class="statetext hidden"&gt; 之间有错字

    如果您想将事件添加到st_1,那么您上面的 html 代码是不完整的,但也许这里是您想要的

    function createCallback(i) {
      return function() {
        jQuery(".statetext").addClass("hidden");
        //console.log(i);
        jQuery("#st_" + i + "-1").toggleClass("hidden");
      };
    };
    
    jQuery(document).ready(function() {
      for (let i = 1; i < 50; i++) {
        $("#st_" + i).click(createCallback(i));
    
      };
    });
    .hidden{display:none}
    .toggle{font-weight:bold;cursor:pointer}
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
    <div id="st_1" class="toggle">+ toggle this state</div>
    <div id="data-area">
      <div id="st_1-1" class="statetext hidden">
        <h4>Alabama</h4>
        <ul class="experience-list">
          <li>Right of Way Land Services (Pipeline, Transmission, Telecommunications)</li>
          <li>Mineral Property Management</li>
        </ul>
        <h4>Recent Projects</h4>
        <ul class="experience-list">
          <li>500+ mile multistate FERC pipeline</li>
          <li>700+ mile multistate FERC pipeline</li>
          <li>270+ mile multistate FERC pipeline</li>
        </ul>
      </div>
    </div>
    <div id="st_2" class="toggle">+ toggle this state</div>
    <div id="data-area">
      <div id="st_2-1" class="statetext hidden">
        <h4>Alaska</h4>
        <ul class="experience-list">
          <li>Right of Way Land Services (Pipeline, Transmission, Telecommunications)</li>
          <li>Mineral Property Management</li>
        </ul>
        <h4>Recent Projects</h4>
        <ul class="experience-list">
          <li>500+ mile multistate FERC pipeline</li>
          <li>700+ mile multistate FERC pipeline</li>
          <li>270+ mile multistate FERC pipeline</li>
        </ul>
      </div>
    </div>

    【讨论】:

    • 这不能正常工作。该代码应该将隐藏类应用于不是目标 div 的所有 div。因此,例如,如果有人显示了阿拉巴马州,然后他们点击了加利福尼亚州,阿拉巴马州将被隐藏,并且只显示加利福尼亚州。不过还是谢谢你的回答。
    • 找到了问题,是错字。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-22
    • 1970-01-01
    相关资源
    最近更新 更多