2011-12-20 54 views
0

我有两个span包含一个带有相同id的HTML文本框,如“field1”。基于下拉值,在给定时间仅在屏幕上显示这两个范围。显示跨度中的任何一个或者不显示任何一个。从两个具有相同ID的HTML元素之一提取值

我在原型js中使用.hide();.show();来根据下拉值显示和隐藏这些跨度。但是,只要我在提交时尝试获取$F('field1');的值,我只会获得第一个HTML文本框的值(该值为空)。

有没有一种方法可以解决这个问题,以获得可见的HTML文本框的值?

+6

没有两个元素都不应具有相同的ID - 它必须是一个唯一的标识符。这样做违反了DTD。将元素更改为具有不同的ID。 – Polynomial 2011-12-20 09:59:37

+1

2个元素使用class而不是ID。 – yosh 2011-12-20 10:01:23

+0

@Polynomial是的,我同意这一点,但由于某些原因,我被迫为这两个组件使用相同的ID。就像,我正在使用Spring。 HTML元素的表单ID应该映射到一个表单对象,因为一次只能有一个表单对象可用。所以我不能有不同的ID。在Spring中, Abhishek 2011-12-21 05:18:40

回答

3

使用类。元素的ID应该是唯一的,因为它是ID;)

  1. 选择具有指定类名称的所有元素。您将获得具有指定类名称的元素数组。

    var eleCollection = document.getElementByClassName("anyClassName"); 
    
  2. 在此之后,U可以通过这个数组元素的循环,并得到他们的价值观

    for(element in eleCollection) { 
        var thisValue = element.getAttribute("value"); 
        console.log("Element: ",element," value: ",value); 
    } 
    
+0

因此,当我循环获取每个元素时,如何获取文本框的值?我应该使用 .innerHTML吗? – Abhishek 2011-12-20 12:59:37

+0

请参阅编辑答案.. – Shades88 2011-12-20 13:19:20

+2

如果您使用的是Prototype,我会建议您坚持Prototype的做事方式。 '$$()'而不是'document.getElementByClassName()','array.each()'而不是'for(var in array)',等等 – dontGoPlastic 2011-12-20 18:51:12

4

id在页面内应该是唯一的。

我假设你有不同的下拉值。如果是这样,请为这些跨度分配不同的id,并使用选定的下拉值选择其中一个。

相关问题