2015-12-23 204 views
3

我有一个页面,我有一个text input在某些屏幕尺寸更改为select在其他屏幕尺寸。jQuery:可见并没有找到元素

的挑战

我希望能够得到keyupchangeinputselect的价值,而无需复制代码 - 所以我给的元素相同的ID,因为他们知道自己永远不会同时可见,并选择使用以下元素:例如#ID:visible - 下面的代码

$('#test:visible').on('keyup change', function(){ 
 
\t alert($(this).val()); 
 
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script> 
 
<div style="display: none"> 
 
\t <input id="test"> 
 
</div> 
 
<select id="test"> 
 
\t <option value="10">10</option> 
 
\t <option value="20">20</option> 
 
</select>

的问题

这根本不起作用。 I have read the jQuery visible-selector page并且我似乎正在以正确的方式做事,但警报根本不会触发。

我误解了这是如何工作的?

+0

但是你可以给一个类,并尝试一下 –

+1

ID是奇异....那是你的问题 – epascarello

+1

即使他们是不可见的,具有“visibility:hidden的”元素仍然占据DOM上的空间。因此,您不能拥有多个具有相同ID的元素。 –

回答

8

所以我给的元素相同的ID,因为他们知道自己将永远不会在同一时间

不幸的是,这不是它的工作原理是可见的。无论元素是否可见,您都不能在同一文档的范围内复制id属性。您需要使用类组中的多个元素结合在一起:

$('.test:visible').on('keyup change', function(){ 
 
    alert($(this).val()); 
 
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script> 
 
<div style="display: none"> 
 
    <input class="test"> 
 
</div> 
 
<select class="test"> 
 
    <option value="10">10</option> 
 
    <option value="20">20</option> 
 
</select>

+0

嗯 - 是的,只是改变他们上课,一切正常 - 你生活和学习!谢谢! –

+0

没问题,很乐意帮忙。 –

-1

不能有相同ID的多个DOM元素。

id="test"