#jquery #arrays #dynamic
#jquery #массивы #динамический
Вопрос:
Я пытаюсь выполнить цикл над массивом. Массив будет отличаться в зависимости от того, какой вариант вы выбрали в окне выбора. Я не могу понять, как выбрать, над каким массивом выполнять цикл. Бит, который не работает, — это ‘arrValues thisId’ внутри каждого цикла.
$('.guestLists').change( function() {
var thisId = $(this).val();
var myCounter = parseInt(1);
var arrValues0 = [ "", "", "", "" ];
var arrValues1 = [ "1", "1", "1", "1" ];
var arrValues2 = [ "2", "2", "2", "2" ];
// Loop over each value in the array.
$.each(
arrValues thisId,
function( intIndex, objValue ){
$('#guestListName' myCounter).attr('value',objValue);
myCounter ;
}
);
});
Любая помощь была бы отличной.
Комментарии:
1. почему бы не использовать многомерный массив?
Ответ №1:
Если вы хотите создать имя переменной во время выполнения, используйте eval
:
$.each(
eval("arrValues" thisId),
...
Просто убедитесь в безопасности его параметра, особенно если он каким-то образом зависит от внешнего / пользовательского ввода. В приведенном выше случае, если thisId
является целым числом, все должно быть в порядке.
Комментарии:
1. Ого, мне нравится этот сайт. Спасибо
Ответ №2:
Вы можете использовать window[«foobar»], например, window["arrValues" thisId]
, но лучше всего использовать многомерный массив, как сказал Ханнес.
Ответ №3:
Вот как вы могли бы получить доступ к многомерному массиву
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<div id="foo">
<select class="guestLists">
<option value="0">0</option>
<option value="1">1</option>
<option value="2">2</option>
</select>
<div id="stuff"></div>
</div>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script>
$('document').ready(function(){
var Values = Array();
Values[0] = [ "", "", "", "" ];
Values[1] = [ "1", "1", "1", "1" ];
Values[2] = [ "2", "2", "2", "2" ];
$('.guestLists').change( function() {
var thisId = $(this).val();
$.each(
Values[thisId],
function( intIndex, objValue ){
$('div#stuff').append(objValue ', ');
}
);
});
});
</script>
</body>
</html>