@XenK

Как правильно отправить форму YII2, со скрытыми полями?

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

Первое что пришло в голову, сделать так:

Добавить ID к картинкам, и после клика менять value у Input, а потом уже отправлять:

View:
<img src="/img1.png" id="img1" class="imageSelect">
<img src="/img2.png" id="img2" class="imageSelect">
<img src="/img3.png" id="img3" class="imageSelect">

<?php ActiveForm::begin(['id' => 'form1', 'action' => '/image']); ?>
    <?= Html::hiddenInput('ImageNum', ''); ?>
<?php ActiveForm::end(); ?>

Controller:
public function actionImage() {
    $json = ['response' => 'ok'];
    \Yii::$app->response->format = Response::FORMAT_JSON;
    return $json;
}

JS:
$('.imageSelect').click(function () {
    $('input[name=ImageNum]').val($(this).attr('id'));
    Send();
});

function Send() {
    $('#form1').submit(function (e) {
        var url = '/image';
        $.ajax({
            type: "POST",
            url: url,
            data: $('form1').serialize(),
            success: function (data) {
                console.log(data);
            }
        });
        e.preventDefault();
    });
}


На деле, при клике на картинке ничего не происходит. Правильный ли такой подход? Если да, то в чём ошибка?
  • Вопрос задан
  • 571 просмотр
Пригласить эксперта
Ответы на вопрос 1
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
А надо ли отправлять всю форму по клику на картинку? Может просто сделать ajax при клике и отправлять id картинки? По Вашему экшену не понятно зачем он. Он ничего не делает кроме возврата 'response' => 'ok'.
Можно воoбще обвернуть каждую картинку в ссылку:
echo Html::a('<img src="/img1.png" id="img1" class="imageSelect">', ['/mycontroller/image', 'id' => $model->id], [
                            'data' => [
                                'confirm' => 'Вы точно хотите выбрать это фото?',
                                'method' => 'post',
                            ],
                        ]);
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы