这个javascript可以缩短吗? Jquery是一个选项

时间:2016-03-31 13:05:38

标签: javascript jquery

这个想法是当每个选择字段被更改时,它将传递表单操作所需的部分目录(每个选项的值)。即:

<select onChange="chgFrmAtn" id="1-1">
 <option value="">Any</option>
 <option value="exDir1Option1">option 1</option>
 <option value="exDir1Option2">option 2</option>
</select>

所以这里是javascript,基本上我想建立2个目录,几个不同的选项。选项数远远多于此示例脚本中的列表。选项可以按任何顺序排列。如果选择了任何一个,它就不会添加到目录中。

function chgFrmAtn( itemVal )
{
    var directory1Part1 = '';
    var directory1Part2 = '';
    var directory1Part3 = '';

    var directory2Part1 = '';
    var directory2Part2 = '';

    if(itemVal == '1-1'){
        directory1Part1 = document.getElementById(itemVal);
    }
    if(itemVal == '1-2'){
        directory1Part2 = document.getElementById(itemVal);
    }
    if(itemVal == '1-3'){
        directory1Part3 = document.getElementById(itemVal);
    }
    if(itemVal == '2-1'){
        directory1Part1 = document.getElementById(itemVal);
    }
    if(itemVal == '2-2'){
        directory1Part2 = document.getElementById(itemVal);
    }
    document.advancedSearchForm.action = directory1Part1 + directory1Part2 + directory1Part3 + '/' + directory2Part1 + directory2Part2 + '/';
}

提前谢谢。

2 个答案:

答案 0 :(得分:2)

function chgFrmAtn(itemVal)
{
      document.advancedSearchForm.action = document.getElementById(itemVal).value;
}

基本上你只会在directoryxParty中得到一个值,因为itemVal将保持不变,只有一个if语句为真。

修改

如果必须附加每个选择的值,那么

var selectIds = [“1-1”,“1-2”,“1-3”,“2-1”,“2-2”];

function chgFrmAtn()
{
     var vals = selectIds.map(function(id){ 
        var obj = document.getElementById(id);
        return obj && obj.value ? obj.value : ""; 
     }); 
     document.advancedSearchForm.action = vals[0] + vals[1] + vals[2] + '/' + vals[3] + vals[4] + '/';
}

答案 1 :(得分:2)

您可以使用两个数组并映射比较。

function chgFrmAtn(itemVal) {
    var vals = ['1-1', '1-2', '1-3', '2-1', '2-2'],
        directory = vals.map(function (a) {
            return itemVal === a ? document.getElementById(a) : '';
        });

    document.advancedSearchForm.action = directory[0] + directory[1] + directory[2] + '/' + directory[3] + directory[4] + '/';
}