Ванильный JavaScript получить значение из поля выбора? - PullRequest
1 голос
/ 16 марта 2011

Это старый скрипт, и моя модификация не работает.

var x=parent.frames[0].document.getElementsByTagName("INPUT");
for(a=0; a < x.length; a++){

Мне нужно добавить поддержку для полей выбора, чтобы я сделал это ..

var x=parent.frames[0].document.getElementsByTagName("INPUT");
var y=parent.frames[0].document.getElementsByTagName("select");
x = x+y;
for(a=0; a < x.length; a++){

После for мы имеем это.

if(misc.length == 0){
    misc = misc + x[a].name + ':' + x[a].value + ':' + x[a].checked;
} else {
    misc = misc + "~cmd~" + x[a].name + ':' + x[a].value + ':' + x[a].checked;
}

Кто-нибудь знает, как это сделать, чтобы выбранные значения возвращались также в массиве?

Ответы [ 2 ]

0 голосов
/ 16 марта 2011

getElementsByTagName возвращает HtmlCollection, и, к сожалению, мы не можем просто использовать x.concat(y) для возврата нового комбинированного массива.

Вы можете просто создать новый массив, а затем перебрать x и y и нажать значение наит.

var z = new Array();

for (var i=0; i < x.length; i++) {
    z.push(x[i]);
}

for (var j=0; j < y.length; j++) {
    z.push(y[j]);
}

var misc="";
// Loop through z and do whatever we want
for (var k=0; k < z.length; z++) {
    if(misc.length == 0){
        misc = misc + z[k].name + ':' + z[k].value + ':' + z[k].checked;
    } else {
        misc = misc + "~cmd~" + z[k].name + ':' + z[k].value + ':' + z[k].checked;
    }
}    
0 голосов
/ 16 марта 2011

<select> элементы должны читаться по-разному. Вам нужно перебрать его параметры. Вот пример кода:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head><title></title>
<script type="text/javascript"><!--
function fetchValues(){
    var s = document.getElementsByTagName("select");
    var output = "";
    for(var i=0, len=s.length; i<len; i++){
        output += s[i].name + ":\n";
        for(var j=0, lenj=s[i].options.length; j<lenj; j++){
            output += "\t- " 
                   + s[i].options[j].value 
                   + " (" + s[i].options[j].text + "): " 
                   + (s[i].options[j].selected ? 'Yes' : 'No') 
                   + "\n";
        }
    }
    alert(output);
}
//--></script>
</head>
<body>

<form action="" method="get">
    <select name="single-value">
        <option value="s1">First single value</option>
        <option value="s2">Second single value</option>
        <option value="s3" selected="selected">Third single value</option>
        <option value="s4">Fourth single value</option>
    </select>
    <select name="multiple-values" multiple="multiple" size="5">
        <option value="m1">First multiple value</option>
        <option value="m2" selected="selected">Second multiple value</option>
        <option value="m3">Third multiple value</option>
        <option value="m4" selected="selected">Fourth multiple value</option>
    </select>
    <input type="button" onclick="fetchValues()" value="Fetch values">
</form>

</body>
</html>

Я предлагаю вам использовать эти идеи для написания функции, которая принимает в качестве аргумента узел <select> и возвращает массив.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...