Exebeche
@Exebeche
Осваиваю программирование

Как привыборе чекбокса передать запрос в адресную строку?

Хочу сделать красивый вид для элементов фильтров - выпадающий список из дивов с чекбоксами...
При выборе чекбокса происходит фильтрацфия, но у чекбокса сбрасывается checked и фильтрация невозможна по нескольким чекбоксам.

Вьюха:
<?php
$this->registerJs(
    '$("document").ready(function(){
        $(document).on("change", ".status_chk", function(e) {
		    e.preventDefault();
            $("#filter-form").submit();
        });
    });'
);
?>

<div class="shop-new col-md-12 animated bounceInLeft">

<h1>
    New
</h1>

    <div class="col-md-12 filters-menu-section">



    </div>

<?php Pjax::begin([
    'id' => 'productList',
    'enablePushState' => false,
    'enableReplaceState' => false,
]); ?>

    <?php $form = ActiveForm::begin([
        'id' => 'filter-form',
        'action' => ['new'],
        'method' => 'get',
        'options' => ['data-pjax' => true],
    ]); ?>

    <div  class="filter">

        <div class="filter-prompt">
            <p>
                Category
            </p>
        </div>

        <div class="filter-options">
            <?php foreach ($categories as $category): ?>
            <div class="filter-options_item">
                <label for="category_<?= $category['id'] ?>" class="status_chk">
                    <input id="category_<?= $category['id'] ?>" type="checkbox" name="ProductSearch[category_id][]" value="<?= $category['id'] ?>"> <span class="label-text"><?= $category['title'] ?></span>
                </label>
            </div>
            <?php endforeach; ?>
        </div>

    </div>

    <?php ActiveForm::end();?>

<?= $this->render('_loop', ['dataProvider' => $dataProvider, 'searchModel' => $searchModel]); ?>

<?php Pjax::end(); ?>

</div>


Как такое победить и почему чекбокс теряет свое состояние?

Для мультивыбора должна формироваться ссылка типа
?ProductSearch[category_id]=3&ProductSearch[category_id]=6
  • Вопрос задан
  • 116 просмотров
Пригласить эксперта
Ответы на вопрос 1
EnChikiben
@EnChikiben
у вас в Pjax форма перегружается целиком, т.е. берется html с сайта и заменяется, а во вновь пришедшей они не отмечены. Можно как то так сделать грубо говоря:
<?php foreach ($categories as $category): ?>
            <div class="filter-options_item">
                <label for="category_<?= $category['id'] ?>" class="status_chk">
                    <input id="category_<?= $category['id'] ?>" type="checkbox" name="ProductSearch[category_id][<?= $category['id'] ?>]" value="<?= $category['id'] ?>" <?=isset(Yii::$app->request->post('ProductSearch'),Yii::$app->request->post('ProductSearch')['category_id'][$category['id']]) ? " checked='checked'" : "" ?> > <span class="label-text"><?= $category['title'] ?></span>
                </label>
            </div>
            <?php endforeach; ?>


т.е. проверять если ли в посте выбранная категория и ставить чекед.

или можно перенести
<?php Pjax::begin([
'id' => 'productList',
'enablePushState' => false,
'enableReplaceState' => false,
]); ?>

за форму, чтобы форма не входила в нее
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы