javascript-基于选择隐藏/显示div

javascript-基于选择隐藏/显示div,javascript,Javascript,我有一个rails表单,用户必须从下拉菜单中选择一个值,并根据该值显示表单元素的其余部分 <div id="A"> a b c </div> <div id="B"> x y z c </div> <div id="B"> w a q c </div> A. B C x Y Z C W A. Q C 当用户从选择菜单中选择值A时,将显示id为A的div,其余div将隐藏 问题是,在不同div中重复了一些字段,当用户

我有一个rails表单,用户必须从下拉菜单中选择一个值,并根据该值显示表单元素的其余部分

<div id="A">
a
b
c
</div>

<div id="B">
x
y
z
c
</div>

<div id="B">
w
a
q
c
</div>

A.
B
C
x
Y
Z
C
W
A.
Q
C
当用户从选择菜单中选择值A时,将显示id为A的div,其余div将隐藏

问题是,在不同div中重复了一些字段,当用户在div a中输入字段“a”的值时,该值将被DIV B中的空白值覆盖,尽管div b从视图中被隐藏。

我想知道是否有可能在不同的div中有相同的字段,并且能够仅存储在显示的div中找到的字段的值,即使该字段在其他div中找到


非常感谢您提供的任何建议。

为什么不为字段提供稍微不同的值,并检查哪一个字段实际上是用onsubmit函数填写的呢

你有:

a1 B c1 x Y Z c2 W a1 Q c2 然后在onsubmit中: 如果(a1!=''{提交a1} 如果(a2!=''{submit a2}


抱歉,不完全是代码,但它是您的起点。

当您隐藏div时,为所有子项启用禁用属性,当您显示div时,将其删除。大概是这样的:

var showDiv = function ( id ) {
    var all = [document.getElementById( 'A' ), 
               document.getElementById( 'B' ), 
               document.getElementById( 'C' )],
        cur = document.getElementById( id ),
        inps;

    for (var i = 0, il = all.length; i < il; i++) {

        inps = all[i].getElementsByTagName('input');

        for (var j = 0, jl = inps.length; j < jl; j++) {
            inps[j].setAttribute('disabled', 'disabled');
        }

        all[i].style.display = 'none';

    }

    inps = cur.getElementsByTagName('input');

    for (j = 0, jl = inps.length; j < jl; j++) {
        inps[j].removeAttribute('disabled');
    }

    cur.style.display = 'block';
};
var showDiv=函数(id){
var all=[document.getElementById('A'),
document.getElementById('B'),
document.getElementById('C')],
cur=document.getElementById(id),
inps;
对于(var i=0,il=all.length;i
需要真正了解HTML。每个div中的输入是否使用相同的
名称
属性?这就是问题所在。我同意尼克·布伦特的观点。div是否隐藏并不重要,重要的是名称。此外,两个元素具有相同的id是不好的…是的,我同意这两个u。问题是,基于在选择列表中进行的选择,将显示包含输入字段的相应div。现在,当用户在该输入字段中输入值时,将进行ajax调用,并在表单上显示从数据库检索到的数据。对于在选择列表中所做的每个选择,数据的显示方式都是不同的。这只是一个想法——对多个元素使用相同的
id
,是一种不好的做法。尽管围绕它编写代码是可能的,但社区通常不接受这种做法。如果必须使用同一个类两次,大多数人都会使用该类。非常感谢提供的所有建议:)