Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用getElementsByTagName修改表单_Javascript_Arrays_For Loop_Getelementsbytagname_For In Loop - Fatal编程技术网

Javascript 使用getElementsByTagName修改表单

Javascript 使用getElementsByTagName修改表单,javascript,arrays,for-loop,getelementsbytagname,for-in-loop,Javascript,Arrays,For Loop,Getelementsbytagname,For In Loop,我是Javascript新手,在一个项目上遇到了麻烦 我有一个表单,我只想在每个字段集中显示第一个select元素($initial),直到用户在$initial中选择了一个选项。之后,将显示其他选择。如果用户选择$initial中的第一个选项,其他选项将再次隐藏 以下是我目前掌握的代码: var $ = function(id) { return document.getElementById(id); } var setOpen = function(id) { $(id).

我是Javascript新手,在一个项目上遇到了麻烦

我有一个表单,我只想在每个字段集中显示第一个select元素($initial),直到用户在$initial中选择了一个选项。之后,将显示其他选择。如果用户选择$initial中的第一个选项,其他选项将再次隐藏

以下是我目前掌握的代码:

var $ = function(id) {
    return document.getElementById(id);
}
var setOpen = function(id) {
    $(id).setAttribute("class", "open");
};
var setClosed = function(id) {
    $(id).removeAttribute("class");
};

var sets = document.getElementsByTagName("fieldset");

for(var i = 0; i < sets.length - 1; i++) { //fieldset at the end with no selects is skipped
    var setNode = sets[i].getAttribute("id");
    var selects = $(setNode).getElementsByTagName("select");
    var initial = selects[0].id;
    for (var x = 0; x < selects.length; x++) {
        var selectNode = selects[x].getAttribute("id");
        $(initial).onchange = function() {
            if ($(initial).value != "none") {
                setOpen(selectNode);
            } else {
                setClosed(selectNode);
                setOpen(initial);
            }
        };  
    }
}
var$=函数(id){
返回文档.getElementById(id);
}
var setOpen=函数(id){
$(id).setAttribute(“类”,“打开”);
};
var setClosed=函数(id){
$(id).removeAttribute(“类”);
};
变量集=document.getElementsByTagName(“字段集”);
对于(var i=0;i
我最初使用for in循环,但它们给了我不可靠的结果(比如“object2没有方法‘getAttribute’”)。出于某种原因,使用For循环不会给我同样的错误(这种语言很有趣)

这件事我已经琢磨了好几天了。我相信有一个相当简单的方法来完成这件事,但就我个人而言,我想不出来


谢谢。

你看过淘汰赛()吗?它的设计目的是帮助用户界面合成,这与您试图实现的目标非常相似。@jaq316谢谢您的链接。我没听说过它,尽管它看起来确实很有用。有趣的更新:我丢失了一个分号(谢谢,JSHint),现在它将在更改时显示其他选择。但它只显示第一个和最后一个选择。在这里。我刚刚意识到一个巨大的问题:即使这是工作,这一切都会发生,即使这不是我想要的。哦,好吧,我想我得做得更具体些。