【问题标题】:jQuery input[name=""] selector not workingjQuery 输入 [name=""] 选择器不起作用
【发布时间】:2013-07-14 21:36:44
【问题描述】:

所以从昨天下午开始,这个问题一直让我发疯。我一直在为我们的网站开发一个报价计算器,我正在尝试为我的表单上的单选按钮设置样式。报价计算器可以在这里看到:

http://www.thoughtspacedesigns.com/services/web-services/web-design/web-design-quote-calculator

如您所见,当您在问题上单击“是”或“否”时,背景会变为嵌入的橙色。这些只是带有标签的单选按钮。这是一些示例 HTML:

<input type="radio" name="cms" value="yes" id="cms1" /><label for="cms1">Yes</label>
<input type="radio" name="cms" value="no" id="cms2" /><label for="cms2">No</label>

在同一个表单中有多个“是/否”单选组。然后我把 display:none;在单选按钮上并相应地设置标签样式。然后,当点击一个标签时,我使用 jQuery 向它添加一个类,如下所示:

$("label").live('click', function() {
    var thisInput = $(this).prev("input");
    var radioGroup = thisInput.attr("name");
    $(this).addClass("checked");
    $(":radio[name='"+radioGroup+"']").not(thisInput).next("label").removeClass("checked");
}
);

如您所见,当单击单选按钮的标签时,会向该标签添加“选中”类。此类具有在我的样式表中指定的样式(即背景颜色)。然后,所有同名但不是被点击的单选按钮都应该删除“checked”类。

这在 FireFox 和 Chrome 中运行良好,但当我在 IE8(或 IE7)中尝试时,一切正常,但似乎 $(":radio[name='"+radioGroup+"']") 选择器不起作用,因为该类没有被删除。本质上,在 IE 中,我的标签不会“取消突出显示”。我尝试了许多选择器的变体,使用伪选择器、过滤器,但仍然没有运气。有人对此有所了解吗?

【问题讨论】:

  • .live 已弃用,请改用.on
  • 这个在IE9+中能用吗
  • 用 .on 试过了,还是没有骰子。我用的是mac,实际上无法访问ie9,所以我不确定。

标签: javascript jquery jquery-selectors


【解决方案1】:

在 IE 中,您的链接脚本之一在 &lt;label /&gt;&lt;input /&gt; 之间添加以下内容(刷新 html 后可在开发人员工具中查看)

<css3-container style="Z-INDEX: -1; POSITION: absolute; DIRECTION: ltr; TOP: 780px; LEFT: 0px">  
    <background style="POSITION: absolute; TOP: 0px; LEFT: 0px">
        <group1>
            <?xml:namespace prefix = css3vml ns = "urn:schemas-microsoft-com:vml" />
            <css3vml:shape style="POSITION: absolute; WIDTH: 86px; HEIGHT: 42px; TOP: 0px; BEHAVIOR: url(#default#VML); LEFT: 0px" coordsize = "172,84" coordorigin = "1,1" fillcolor = "#ff7955" stroked = "f" path = " m0,16 qy16,0 l156,0 qx172,16 l172,68 qy156,84 l16,84 qx0,68 x e">
                <css3vml:fill></css3vml:fill>
            </css3vml:shape>
        </group1>
    </background>
</css3-container>

这会破坏您的选择器,因为 .prev("input") 无法再找到输入

【讨论】:

  • 宾果游戏! 标签是由 css3PIE 添加的:css3pie.com PIE 是一个扩展,可以在 ie7 和 ie8 中启用 css3 属性,如 box shadow。显然,它是通过在调用它的元素之前添加一个元素来实现的。为了解决我的问题,我刚刚从标签元素中删除了 PIE。不过,我仍然想使用 PIE。除了“prev”之外,还有其他方法可以选择此元素吗?就像可能是“最接近的”?我不知道。意见?
  • @ThoughtSpaceDesigns 你不能按 id 选择吗? $('#'+$(this).attr("for"))
  • 我也会使用标签中的“for”属性
  • @ThoughtSpaceDesigns 您将需要遍历其他输入以从标签中删除类-因为结构不一致-这是您的操作方法jsfiddle.net/LuhWD
  • @ThoughtSpaceDesigns 检查我在上一条评论中的小提琴 - 它向您展示了如何抓取标签,因为我看到 .next() 也不起作用
猜你喜欢
  • 2012-04-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-19
相关资源
最近更新 更多