如何编写此javascript函数以显示两个+;选择特定类型时的字段集

如何编写此javascript函数以显示两个+;选择特定类型时的字段集,javascript,Javascript,我有一个webform,在本例中,用户从下拉字段中选择项目类型,并根据选择的类型隐藏/显示各个部分。下面数组中的id是字段集id,值是在下拉字段中选择的值 现在问题来了。我有一个客户希望在选择特定项目时显示两个节/字段集。[此选项可应用于各种项目类型]例如,如果我选择“宣传册”作为项目类型,客户希望出现宣传册部分/字段集以及名为“简要详细信息”的字段集。它的id是“556” 如果我在下面的数组中添加“{id:'556',value:'宣传册'}”,则“简要详细信息”部分/fieldset将显示,

我有一个webform,在本例中,用户从下拉字段中选择项目类型,并根据选择的类型隐藏/显示各个部分。下面数组中的id是字段集id,值是在下拉字段中选择的值

现在问题来了。我有一个客户希望在选择特定项目时显示两个节/字段集。[此选项可应用于各种项目类型]例如,如果我选择“宣传册”作为项目类型,客户希望出现宣传册部分/字段集以及名为“简要详细信息”的字段集。它的id是“556”

如果我在下面的数组中添加“{id:'556',value:'宣传册'}”,则“简要详细信息”部分/fieldset将显示隐藏了在这种情况下也应显示的“宣传册”字段集。我确实明白为什么会发生这种情况,但我不知道如何让javascript工作

那么如何使用下面的代码库对其进行编码呢

var projectTypes = new Array (
    {id : '123', value:'Banner'},
    {id : '456', value:'Ad'},
    {id : '789', value:'Graphics'},
    {id : '987', value:'Billboard'},
    {id : '654', value:'Booklet'},
    {id : '321', value:'Tickets'},
    {id : '147', value:'Window'},
    {id : '159', value:'Brochure'}
    );

/*function below occurs onChange event of project type dropdown:*/
refreshSections(project_type);  

/*
 *  Function used to hide/show sections based on selected project type
 */
function refreshSections(selectedType) 
{   
    for (var i = 0; i < projectTypes.length; i++) 
    {
        if (projectTypes[i].value == selectedType) 
        {
            document.getElementById("section-"+ projectTypes[i].id).style.display = '';
        } else {
            document.getElementById("section-"+ projectTypes[i].id).style.display = 'none';
        }
    }   
}
var projectTypes=新数组(
{id:'123',值:'Banner'},
{id:'456',值:'Ad'},
{id:'789',值:'Graphics'},
{id:'987',值:'Billboard'},
{id:'654',值:'spoolk'},
{id:'321',值:'Tickets'},
{id:'147',值:'Window'},
{id:'159',值:'宣传册'}
);
/*项目类型下拉列表的更改事件发生以下函数:*/
更新部分(项目类型);
/*
*用于根据选定项目类型隐藏/显示剖面的函数
*/
功能刷新部分(selectedType)
{   
对于(var i=0;i
用数组代替单个id怎么样

{id : ['159','556'], value:'Brochure'}
然后在函数代码中你可以

if (projectTypes[i].value === selectedType) {
  if (typeof projectTypes[i].id == "object") {
    var targets = typeof projectTypes[i].id;
    for (var j = 0, l = targets.length; j < l; j++) {
      document.getElementById("section-"+ targets[j]).style.display = '';
    }
  } else {
    document.getElementById("section-"+ projectTypes[i].id).style.display = '';
  }
} else {
  document.getElementById("section-"+ projectTypes[i].id).style.display = 'none';
}
if(项目类型[i]。值===selectedType){
if(项目类型的类型[i].id==“对象”){
var targets=typeof projectTypes[i].id;
对于(var j=0,l=targets.length;j

我没有深入测试它。。。您可以添加带有一些标记和JS代码的,以便更容易检查解决方案

不确定修改代码/html的自由度,但是如果能够合理访问相关部分,我倾向于为您的projectTypes数组添加另一个值。实施不一定要像这样,但例如:

var projectTypes = new Array (
    {id : '556', value:'Brief Details', showSections: [556, 159]}
);
在所有“可隐藏部分”中添加公共类名:

<div id="section-156" class="hideable-section"><!--content--></div>

然后修改函数以将该属性用作覆盖:

function refreshSections(selectedType) {   
    var i, j;
    //hide everything by default (something like document.getElementsByClassName('hideable-section')
    for (i = 0; i < projectTypes.length; i++) {
        if (projectTypes[i].value == selectedType) {
            if(projectTypes[i].showSections != null) {
                for(j = 0; j < projectTypes[i].showSections.length; j++){
                    document.getElementById("section-"+ projectTypes[i].showSections[j].toString()).style.display = '';
                }
            }
            else {
                document.getElementById("section-"+ projectTypes[i].id).style.display = '';
            }
        }
    }   
} 
函数刷新节(selectedType){
varⅠ,j;
//默认情况下隐藏所有内容(如document.getElementsByClassName('hidable-section'))
对于(i=0;i