我有一个页面,其中包含表单元素的重复ID。问题是我根据切换单独显示元素。所以这两个ID都不会同时出现。
然而,当我对该元素进行表单验证时,它总是选择代码中最后显示的元素(即使它是隐藏的)。
是否有选择器来选择可见的重复ID?
我尝试过以下但无济于事:
$('#my_element:visible').val();
答案 0 :(得分:17)
由于关于此前提的无数其他问题将告诉您,在这种情况下您不能使用ID选择器#
;你必须使用$('div[id=foo]')
之类的东西来找到它。
答案 1 :(得分:9)
重复的ID是无效的HTML,几乎总是会导致脚本问题。尽可能避免。
答案 2 :(得分:2)
您必须以使用唯一ID的方式重新设计表单。你会省去很多麻烦。
答案 3 :(得分:2)
发生这种情况的原因是重复ID。对于HTML,ID必须是唯一的才能被视为有效。每当您不使用有效的HTML时,您的结果通常都不稳定。
在这种情况下,即使您一次只显示其中一个表单,它们仍然存在于标记中,这就是为什么代码中的最后一个始终是正在运行的表单。
由于您正在使用jQuery,我强烈建议您使用类。
答案 4 :(得分:1)
您不应该有重复的ID,即使其中一个ID始终是隐藏的。找一些其他方法来做你想要的(类名?)。
答案 5 :(得分:1)
避免在页面上重复ID。它不是有效的HTML。
答案 6 :(得分:1)
不要对多个元素使用相同的id,类更好!
答案 7 :(得分:1)
如Rwwl所说,重复的ID无效。为他们分配类而不是id。
然后你可以做
alert($('.my_element:visible').val());
答案 8 :(得分:1)
尝试:hidden
$("#my_element").find(":hidden").val();
由于以下几个原因,可以将元素视为隐藏:
They have a CSS display value of none.
They are form elements with type="hidden".
Their width and height are explicitly set to 0.
An ancestor element is hidden, so the element is not shown on the page.
注意: visibility: hidden
或opacity: 0
的元素被视为可见,
答案 9 :(得分:0)
您不能仅使用 # id 选择器指定,您需要更具体。一种方法是先选择元素类型,然后选择 id:
对于输入元素:
$('input#my_element:visible').val();
或者对于 div 元素:
$('div#my_element:visible').val();
答案 10 :(得分:0)
使用 jQuery 选择元素然后直接从元素中获取值的另一种解决方案:
$('#my_element:visible')[0].value