【问题标题】:IE issue with :visible? [closed]IE 问题:可见? [关闭]
【发布时间】:2013-04-29 05:15:30
【问题描述】:

谁能告诉我如何在 IE 中进行这项工作?它在所有其他浏览器中都能完美运行!

我假设:visible 是问题所在?

TIA

$('.yes').click(function () {
    $('.question:visible')
        .fadeOut()
        .closest('.question')
        .nextAll('.question')
        .eq(0)
        .delay(400)
        .fadeIn();
});

所有问题都采用以下格式:

<div class="question">
<p>Question 1</p>
<h1>is this a question?</h1>
<label class="btn"><input type="radio" name="question1" value="yes"><span class="yes">YES</span></label>
<label class="btn"><input type="radio" name="question1" value="no"><span class="no">NO</span></label>
<label class="btn"><input type="radio" name="question1" value="maybe"><span class="maybe">MAYBE</span></label>
</div>

问题 >1 如下所示:

<div class="hiddenquestion">
<p>Question 2</p>
<h1>is this a question?</h1>
<label class="btn"><input type="radio" name="question2" value="yes"><span class="yes">YES</span></lable>
<label class="btn"><input type="radio" name="question2" value="no"><span class="no">NO</span></lable>
<label class="btn"><input type="radio" name="question2" value="maybe"><span class="maybe">MAYBE</span></lable>
</div>

.hiddenquestion 当然是 display: none;

【问题讨论】:

  • 你的 HTML 是什么样的?
  • IE 9,还没有测试过
  • 我了解最接近的做法,我有 10 个问题,回答问题会淡出 :visible 一个并淡出下一个。它可以在除 IE 之外的所有其他浏览器中完美运行,感谢您的输入。
  • $('.yes').click(function () { alert($('.question:visible').length); }); 告诉你什么?
  • @undefined 不要忘记closest 测试元素本身以及父元素

标签: javascript jquery css cross-browser


【解决方案1】:

好的,这里有几个问题

首先,您的标签标签没有正确关闭,因为有人已经评论了&lt;/lable&gt; 应该是&lt;/label&gt;

其次,从您的示例中,您的隐藏问题的类属性设置如下&lt;div class="hiddenquestion"&gt;,但我怀疑那里应该有一个空格,这意味着这就是您想要的&lt;div class="hidden question"&gt;。你应该有一个 css .hidden { display: none; } 而不是 .hiddenquestion

第三,你需要为单选按钮和标签添加一个点击处理程序(或者这是它似乎在 IE 中工作的唯一方式),在这种情况下你的 js 应该看起来像这样。

var fn = function () {
    $('.question:visible')
        .fadeOut()
        .closest('.question')
        .nextAll('.question')
        .eq(0)
        .delay(400)
        .fadeIn();
};

// click handler on the yes label
$('.yes').click(fn);

// click handler on the actual yes radio
$(':radio[value="yes"]').change(fn);

【讨论】:

  • 完美,谢谢,它现在在 IE 8 和 9 中运行良好
  • @Danny 好的,但是如果没有第二点,我不确定您的代码是否可以正常工作,因为在您的示例中,隐藏的问题具有“hiddenquestion”类(没有空格) - 所以我不确定如何代码.nextAll('.question') 可以工作......无论如何,如果你让它工作那么这不是问题......
  • Bizzare,它工作正常,所以我猜 fadeIn 取消了显示:没有?虽然我在 Q1 上使用 display: block 和 .question display:none 现在也很好用。无论如何,现在一切都很好,感谢您的帮助。
【解决方案2】:

我认为你的问题是这样的

<label class="btn"><input type="radio" name="question2" value="yes"><span class="yes">YES</span></lable>

请注意&lt;label&gt;&lt;/lable&gt; 的无效结束标记。这会使标记在 IE 中无效。

更新:

在 IE9/8 中测试过,效果很好

标记

<button class="yes">YESS!</button>
  <div class="question" style="display: block">
     <p>Question 1</p>
     <h1>is this a question?</h1>
     <label class="btn">
        <input type="radio" name="question1" value="yes" />
        <span class="yes">YES</span>
     </label> <label class="btn">
        <input type="radio" name="question1" value="no">
        <span class="no">NO</span></label> <label class="btn">
        <input type="radio" name="question1" value="maybe">
        <span class="maybe">MAYBE</span></label>
  </div>
<div class="question">
     <p>Question 2</p>
     <h1>is this a question?</h1>
     <label class="btn">
        <input type="radio" name="question1" value="yes" />
        <span class="yes">YES</span>
     </label> <label class="btn">
        <input type="radio" name="question1" value="no">
        <span class="no">NO</span></label> <label class="btn">
        <input type="radio" name="question1" value="maybe">
        <span class="maybe">MAYBE</span></label>
  </div>
<div class="question">
     <p>Question 3</p>
     <h1>is this a question?</h1>
     <label class="btn">
        <input type="radio" name="question1" value="yes" />
        <span class="yes">YES</span>
     </label> <label class="btn">
        <input type="radio" name="question1" value="no">
        <span class="no">NO</span></label> <label class="btn">
        <input type="radio" name="question1" value="maybe">
        <span class="maybe">MAYBE</span></label>
  </div>

CSS

.question{display: none;}

更新

为了使其在单击单选按钮所有浏览器中的标签文本时工作,您必须将您的 javascript 更改为

//change the selector of .yes to
$('label.yes').click(function () {...

并将问题的“是”部分的标记更改为

<label class="btn yes">
    <input type="radio" name="question1" value="yes" />
    <span>YES</span>
</label>

【讨论】:

  • 那么您一定想要在点击.yes按钮时隐藏当前可见问题并显示下一个隐藏问题
  • 我刚试过这个,点击答案后还是什么都没得到?
  • 顺便说一句,您确定您单击的是“是”文本,而不是单选按钮。如果您想在单击文本“是”的单选按钮时将其淡出,那么您必须在标签上放置“是”类。立即检查更新
  • 为了澄清我对原始标记所做的所有更改,添加了 display: block 到问题 1 并将 .question {display: none} 添加到我的 css
  • 请仔细查看我的原始标记,该类存在于单选按钮上,正如我所说,它在所有其他浏览器上都很好用。
猜你喜欢
  • 2010-09-09
  • 1970-01-01
  • 2016-07-07
  • 2012-01-28
  • 2017-10-14
  • 1970-01-01
  • 1970-01-01
  • 2023-03-24
  • 2012-01-29
相关资源
最近更新 更多