Невозможно опубликовать значения из динамической строки, содержащей список с несколькими вариантами выбора

#php #javascript

#php #javascript

Вопрос:

Я могу динамически создавать поле с несколькими списками, но я не могу опубликовать значения. Элемент select представляет собой двумерный массив, и я не получаю никаких значений, возвращаемых из опций.

Вот мой код javascript:

 function createSelectCell(cell,column,multiselect_type_flag)
{
var copyListBox = document.getElementById(column);
var newListBox = document.createElement('select');

if(multiselect_type_flag == 'F')
{
    newListBox.name = 'column_array_' column '[]';
}
else if(multiselect_type_flag == 'T')
{
    newListBox.name = 'column_array_' column '[][]';
    newListBox.size = '4';
    newListBox.setAttribute('multiple', 'multiple');
}

for (var i = 0; i < copyListBox.options.length; i  )
{
    var newOption = document.createElement("option");
    newOption.text = copyListBox.options[i].text;
    newOption.value = copyListBox.options[i].value;
    newListBox.appendChild(newOption);
}
cell.appendChild(newListBox);
}
  

Запрошен html в комментариях:

 echo "<td><select id='".$column."' name='column_array_".$column."[$i][]' multiple='multiple' size='4'>";
  

Когда я это делаю print_r($_POST['column_array_'.$column]); , я получаю:

 Array ( [0] => Array ( [0] => Secondary Contact ) [1] => Array ( [0] => Authorised to log calls ) ) 
  

когда я должен получать:

 Array ( [0] => Array ( [0] => Secondary Contact [1] => Authorised to log calls ) )
  

Комментарии:

1. пожалуйста, покажите HTML-разметку вашего столбца

2. echo «<td><select id='».$column.»‘ name=’column_array_».$column.»[$i][]’ multiple=’множественный’ размер=’4′>»;

3. Если я выполняю print_r в post, я получаю этот результат: print_r($_POST[‘column_array_’.$column]); Массив ( [0] => Массив ([0] => Вторичный контакт) [1] => Массив ([0] => Разрешено регистрировать вызовы) ), когда я должен получать: Массив ([0] => Массив ([0] => Вторичный контакт [1] => Разрешено регистрировать вызовы) )

4. Я добавил в свой код: </br> var arrayIndex = rowCount - 1; и присвоил массиву индекс: </br> newListBox.name = 'column_array_' column '[' arrayIndex '][]'; </br> хотя проблема, с которой я столкнулся сейчас, заключается в том, что если я удаляю строку, индекс перезаписывает ту, которая используется

5. $post_column_array = array_values($_POST['column_array_'.$column]); </br> Это сбросило индекс массива, так что после удаления строки я все еще мог перебирать массив

Ответ №1:

Я добавил в свой код следующее:

 var arrayIndex = rowCount - 1;
  

и присвоили массиву индекс:

 newListBox.name = 'column_array_' column '[' arrayIndex  '][]';
  

Ответ №2:

это:

 Array ( [0] => Array ( [0] => Secondary Contact ) [1] => Array ( [0] => Authorised to log calls ) )
  

происходит потому, что вы назвали свой выбор с помощью [][], используйте вместо этого одинарные скобки и соответствующий родительский индекс, например:

 <select name="column_array['columnA'][]"> ...o2,o3... </select>
<select name="column_array['columnB'][]"> ...o1,o4... </select>
  

таким образом, результат будет:

 print_r($_POST['column_array'])

Array
(
 [columnA] => Array
        (
            [0] => 2
            [1] => 3
        )
 [columnB] => Array
        (
            [0] => 1
            [1] => 4
        )
)