То, что я собираюсь показать, может быть самым ужасным из существующих кодов, так что будьте готовы.Я новичок в PHP и получил проект CodeIgniter.Вот и мы:
В моем представлении edit_article
я динамически генерирую поля <input>
и делаю их доступными для контроллера, публикуя их в виде массива, уведомление name="pricelevel_checked_array[]"
:
<form id="form-work" class="form-horizontal" role="form" autocomplete="off" method="post">
<!-- excluded code to display form content -->
<?php
$pricelevel_array = array();
$count = 0; ?>
<?php foreach($array_used_for_loop as $item_used_for_loop): ?>
<?php $article_group_price = ""; ?>
<!-- excluded code to fill $article_group_price -->
<div class="col-sm-2">
<div class="checkbox">
<span class="bg-transparent left">
<input type="checkbox" data-init-plugin="switchery" data-size="small" data-color="primary" id="<?=$count?>"
<?php if($article_group_price !== ""): ?>
<?php array_push($pricelevel_array, 1); ?>
checked="checked"
<?php else: array_push($pricelevel_array, 0); ?>
<?php endif; ?>
onchange="groupprice_active_changed(this)"/>
</span>
</div>
</div>
<input hidden type="number" id="pricelevel_checked_array" name="pricelevel_checked_array[]" value="<?=$pricelevel_array[$count];?>">
<?php $count++; ?>
<?php endforeach; ?>
</form>
Как видите, я заполняю этот массив 1
или 0
в зависимости от значения $article_group_price
(я получаю эти значения из контроллера и исходной базы данных).
Все отлично работает при первой загрузке представления и массив заполнен правильно, но я не могу обновить массив, когда я ставлю или снимаю флажок.
Я пытался сделать это быстрои грязный, используя javascript onchange="groupprice_active_changed(this)"
, где я бы использовал переменную $count
для изменения индекса массива, но, к сожалению, это не сработало, поскольку я получаю только одно значение, а не весь массив:
<script>
function groupprice_active_changed(obj) {
if($(obj).is(":checked")){
alert("Yes checked");
var input_value_array = document.getElementById('pricelevel_checked_array').value;
console.log(input_value_array);
for (index = 0; index < input_value_array.length; index++) {
console.log(input_value_array[index]);
}
}else{
alert("not checked")
}
}
</script>
Как лучше всего обновить этот массив или изменить мой код, чтобы я мог публиковать динамически сгенерированные флажки на контроллере? Другая проблема заключается в том, что мне нужен идентификатор checkbox в контроллере, даже если он ложный.И что браузер не публикует непроверенное значение флажка. Итак, просто передать флажки не вариант.
Я, конечно, готов опубликовать больше кода.
Спасибо
Отказ от ответственности: Пожалуйста, не крадите
Просмотр : Полный код
Контроллер : Полный код
Правка 1 : в последнем разделе изменено значение 'php' на 'браузер'
Правка 2 : добавлено так же, как ивесь код, потому что фильтрация только усложнит его.