【问题标题】:Simple Javascript doesn't work in FireFox (but does in ALL other Browsers)简单的 Javascript 在 FireFox 中不起作用(但在所有其他浏览器中起作用)
【发布时间】:2011-05-03 22:38:09
【问题描述】:

我有这段代码,用于在我的网站的常见问题解答部分中显示一些问题的答案。您单击问题,下面会显示包含答案的 div。

它适用于 Safari、Chrome、Opera 甚至 IE,但不适用于 Firefox。

链接什么都不做。

有什么想法,或者有什么更好的方法来做一个“常见问题”部分吗?我已经在我的页面中加载了 jQuery,如果那里有什么可以做得更好的话,我不知道。还是纯 CSS 解决方案?

这是我的代码:

JS代码:

    <script type="text/javascript">
    function toggle(tag) {
        if (tag.style.display=='') {
            tag.style.display='none'    
        } else {
            tag.style.display=''
        }
    }
    </script>

HTML 代码:

<a href="javascript: toggle(question1)">FAQ Question goes here</a>
    <div id="question1" style="display:none">
        <p>FAQ Answer goes here</p>
    </div

【问题讨论】:

  • 你的FF版本是多少?你的代码在 FF 3.6.12 中对我来说很好用。

标签: javascript firefox html hidden


【解决方案1】:

因为您设置了要切换的元素的 ID,所以您需要使用:

document.getElementByID(tag).style.display

而不仅仅是tag.style.display 在您的切换功能中。

【讨论】:

    【解决方案2】:

    尝试将显示设置为“阻止”

    tag.style.display='block'
    

    【讨论】:

      【解决方案3】:

      试试&lt;a onclick='toggle(document.getElementById("question1"));'"&gt;

      【讨论】:

      • 我不认为在锚点内使用 onclick 是有效的 XHTML 吗?
      • 如果可能的话,想尝试一下并按顺序执行此操作
      • onclick 实际上比javascript: URI 更好,因为如果用户在带有onclick 的内容上单击鼠标中键,它仍然会在新窗口中打开,而不是打开空白窗口。跨度>
      【解决方案4】:

      说真的,我推荐你使用 jquery,你不会遇到这种问题,而且它小于 30 Kbs。

      这是你要找的东西:

      http://api.jquery.com/toggle/

      无论如何,您应该始终使用:document.getElementByID 来获取某个元素。

      已编辑

      如果我遇到这种情况,这取决于您的 HTML 的结构:

      http://www.jsfiddle.net/dactivo/Qcm4G/

      我会这样做:

      $(".questionsheader").click(function(){
                                   $(this).next("div").toggle();                             }
      );
      

      其他一些注意事项

      • 出于简单但可能不切实际的原因,我不会使用“display:none”作为答案。没有启用 javascript 的人(就像一些残障人士的软件一样)将无法阅读答案。这就是我用 javascript 隐藏答案的原因。只有启用了 javascript,它们才会消失。
      • 您可以使用其他效果,如 animate()、slidetoggle() 使其更有趣。

      【讨论】:

      • $('.target').toggle(); - 似乎只针对一个元素/一个问题
      • @netadictos - 请参阅我在您的 JS fiddle 链接中发布的 cmets。或在这里阅读它们:嗨,伙计,非常感谢 - 它工作得很好,看起来比我以前更干净,更语义化,你已经将 JS 的数量减少到不到我之前使用的 1/4 .唯一的事情是.. 你在 DIV 标记内有 display:none CSS。这不应该在样式表中单独保存吗?我已将其移至样式表并将 .question 类的样式设置为 display:none。
      • 一切都像这样运行良好,除了关闭 JS 时,答案仍然不可见。这就是你将 display:none 样式放在 DIV 中的原因吗?
      • @Phil- 抱歉,这是一个剪切粘贴错误。我没有意识到内联样式。我已经压制了它。您可以再次查看 jsfiddle 示例。谢谢。它必须在没有 js 活动的情况下工作。
      【解决方案5】:

      试试这个(添加引号):

      <a href="javascript: toggle('question1')">FAQ Question goes here</a>
          <div id="question1" style="display:none">
              <p>FAQ Answer goes here</p>
          </div>
      

      和(使用 getElementById):

      <script type="text/javascript">
      function toggle(tag) {
          tag = document.getElementById(tag);
          if (tag.style.display=='') {
              tag.style.display='none'    
          } else {
              tag.style.display=''
          }
      }
      </script>
      

      更新:对于 jQuery 解决方案,我会使用 jQuery Tabs 方法:

      <a class="toggle" href="#question1">FAQ Question Link 1</a>
      <div id="question1" style="display:none">
          <p>FAQ Answer goes here</p>
      </div>
      <a class="toggle" href="#question2">FAQ Question Link 2</a>
      <div id="question2" style="display:none">
          <p>FAQ Answer goes here</p>
      </div>
      

      和 JS:

      <script type="text/javascript">
      $(document).ready(function() {
          $('.toggle').click(function() {
              $($(this).attr('href')).toggle();
              return false;
          });
      });
      </script>
      

      【讨论】:

      • 感谢 ifaour - 这确实有效!我认为我会坚持下去,或者尝试一个 jQuery 解决方案(除非你也有其中一个?)如果没有任何问题出现,那么尽管奖励你“答案”。谢谢
      • 对于 jQuery 解决方案,我会使用 jQuery Tabs 方法,检查我的更新
      【解决方案6】:

      一个更简单的方法是:

      <script type="text/javascript">
        function toggle(tag) {
            tag.style.display = (tag.style.display == 'block') ? 'none' : 'block';
        }
      </script>
      

      【讨论】:

        【解决方案7】:

        既然你已经有了 jQuery,试试这个:

        $("#" + tag).toggle();
        

        【讨论】:

        • 那不是只显示一个答案吗?我的常见问题列表中有大约 25 个问题,因此每个问题的链接都需要触发其答案
        • 对不起,我对 jQ 不太满意。我该如何实现这个解决方案/想法?
        【解决方案8】:

        好的,您的代码中存在许多问题

        首先,以分号结尾很重要。

        tag.style.display='none' 应该是tag.style.display='none';

        其次,必须在id上使用document.getElementById来获取DOM元素

        我会这样做:

        function toggle(elementId) {
            var tag = document.getElementById(elementId);
            ...
        }
        

        这是demohttp://jsbin.com/abuce4/edit

        【讨论】:

          【解决方案9】:
          <a href="#" onclick="javascript:$(this).next().toggle();">Question</a>
          <div style="display:none;">Answer</div>
          

          或更多“通用”和干净:

          HTML:

          <a class="question">Question 1</a>
          <div class="answer">Answer 1</div>
          
          <a class="question">Question 2</a>
          <div class="answer">Answer 1</div>
          

          CSS:

          .answer{
          display:none;
          }
          

          JS:

          $(document).ready(function() {
          
          $(".question").click(function(event){
              $(this).next().slideToggle();
          });
          }
          

          slideToggle();或切换(); 享受吧。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2014-08-13
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-11-27
            相关资源
            最近更新 更多