【发布时间】:2013-03-27 23:19:51
【问题描述】:
我正在使用 CSS 重新设置广播组的样式,如下所示:
通过将实际输入(按钮)隐藏在标签标签内,然后在 CSS 中将输入本身设置为 display:none,并将标签本身设置为按钮,如下所示:
<label for="likert1" class="likert">
<input type="radio" id="likert1" name="patientViewGroup" value="1">
1
</label>
这一切都可以用 CSS 来完成...但是因为某些浏览器(我在看你,IE8 及以下版本)无法识别 :checked 伪类,所以按照你实际输入的方式进行操作 -这会将值从表单中传递出去 - 并不总是记录它被检查过,所以 JQuery 来救援。
我现在使用 JQuery 在单击其中一个标签时设置 addClass ".amClicked",此时它还将收音机的 "checked" 属性切换为 "true",并从兄弟姐妹。容易,对吧?这是 JQuery 代码:
$('.likert').on("click",function() {
console.log("clikcy!");
if(!$(this).hasClass('amChecked')) {
$(this).addClass("amChecked");
$(this).children(":radio").attr("checked",true).css("display","none");
}
$(this).siblings().removeClass("amChecked")
.children(":radio").css("display","none");
});
好吧,除了 JQuery,出于某种原因,它似乎一心想要在我的 <input> 中添加内联“样式”标签,这会覆盖我的 display: none; 并取消隐藏单选按钮本身,就像下面的#3:
点击后输入代码如下所示:
<input type="radio" id="likert3" name="patientViewGroup" value="3"
checked="checked" style="display: inline-block; " class="amChecked">
更糟糕的是,将.css("display","none") 添加到我的点击代码(如您在上面看到的)不会覆盖它 - 按钮仍然显示。如果我不将它添加到 removeClass 行,则该按钮将停留在那里,未选中,如下所示:
所以 - 谁能告诉我为什么 Jquery 会在我的代码中添加这个,不请自来,我能做些什么来阻止或覆盖它吗?任何帮助将不胜感激!
【问题讨论】:
-
你能创建一个 jsFiddle 示例吗?
-
你添加的是
.amChecked而不是.amClicked -
您不应该将
display: none用于隐藏的单选按钮。请改用position: absolute; left: -10000px;。 IE 将不支持使用display: none或visibility: hidden显式隐藏的单选按钮或复选框上的“单击”事件。 -
但即便如此,如果隐藏的单选元素嵌套在您单击以选择该单选元素的元素中......这有什么关系?
-
谢谢,Pointy,这是非常好的建议,似乎让我找到了解决方案。