Формирование двухмерного массива в javascript
Идея такая: нас странице есть список с чекбоксами. Каждый чекбокс имеет атрибуты title и value.
Надо пробежаться по чекбоксам и собрать массив данных, такого вида (привожу пример php, т.к. толком не знаю синтаксис js)
array(
0=>array('title'=>'тайтл 1-го чекбокса', 'value'=>'содержимое 1-го чекбокса'),
1=>array('title'=>'тайтл 2-го чекбокса', 'value'=>'содержимое 2-го чекбокса'),
2=>array('title'=>'тайтл 3-го чекбокса', 'value'=>'содержимое 3-го чекбокса'),
3=>array('title'=>'тайтл 4-го чекбокса', 'value'=>'содержимое 4-го чекбокса'),
)
Я делаю так:
var allChecked = new Array();
for (var o = checkboxes, j = 0, l = o.length; j < l; j++) {
if (o[j].checked == true) {
cTitle = o[j].title;
//alert(eTitle);
cValue = o[j].value;
//alert(eValue);
acl = allChecked.length;
allChecked[acl] = new Array({'checkbox-value':cValue, 'checkbox-title':cTitle});
};
};
alert(allChecked[0]); // выводит [object Object]
Результат: [object Object]. Правильно ли я делаю? Может не так надо массив на экран выводить? Или неправильно код работает? Помогите, пожалуйста. |
Если я правильно понял то у тебя в одномерном массиве, ассоциативный.
В таком случает надо так.
allChecked[acl] = {'checkbox-value':cValue, 'checkbox-title':cTitle};
Т.к. в JS нет ассоциативных массивов, из заменяют объекты. А алерт все правильно тебе выводит и будет выводить тоже самое после изменения. alert(allChecked[0]['checkbox-value']); так должен выводить значение |
спасибо большое. работает.
А как можно вывести на экран весь массив? |
goldserg,
в js вообще можно сказать нету массивов, массив это тот же объект. Neokortex, это как пример
<input type="button" onclick="show()" value="нажми">
<input type="checkbox" title="t1">
<input type="checkbox" title="t2">
<input type="checkbox" title="t3">
<input type="checkbox" title="t4">
<input type="checkbox" title="t5">
<input type="checkbox" title="t6">
<input type="checkbox" title="t7">
<input type="checkbox" title="t8">
<input type="checkbox" title="t9">
<div id="out"></div>
<script type="text/javascript">
function gc(inO){
var inputs = inO.getElementsByTagName("input"), newinputs = new Array();
for(var i in inputs) if(inputs[i].type == "checkbox") newinputs.push([inputs[i].checked, inputs[i].title]);
return newinputs;
}
function show(){
result = gc(document.body), str="";
for(var i in result) str += i + " = " + result[i];
document.getElementById('out').innerHTML = str;
}
</script>
|
либо по циклу перебором, либо подключить функцию, которая конвертит в JSON, либо firebug в FF - что удобнее всего и быстрее
|
Цитата:
|
goldserg,
Цитата:
JSON - это просто синтаксис для представления объекта в браузере компилятор его уже знает. {a:1, b:2, c:3} - это объект, а синтаксис JSON |
Цитата:
alert(typeof []) |
Да я и не спорю
alert(Object.prototype.toString.call([1,2]).match(/\w+(?=])/)[0]) А насчет JSON - так это чтобы алертом строку вывести, библиотека либо JSON.stringlify (IE8+, все остальные браузеры) позволяет это сделать, а затем вывести алертом например содержимое. |
но всё равно это сначала
alert(Object.prototype.toString.call([1,2]).match(/\w+/)) и так можно, но не во всех браузерах
alert({a:1,b:2}.toSource())
|
| Часовой пояс GMT +3, время: 23:42. |