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