Jquery, перебирающий массивы

#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>