@vnpp

Как реализовать разное поведение по разным Submit в форме, обернутой PJAX?

Есть форма из одного поля, обернутая pjax, и две кнопки submit - Добавить и Заменить.
Пробовал для кнопок указывать name/value, formaction - нужный эффект не достигнут - выполняется action формы, name/value, formaction не влияют на данные, передаваемые в controller.
Необходимо передать разные значения myParam, в зависимости от кнопки.
Элементы ввода пользовательских данных в примере кода опущены.
Pjax::begin([
    'enablePushState' => false, 
    'timeout'=> 5000,
    'id'=> 'pjax1',
    'submitEvent' => 'submit',
    'formSelector' => '#'.'form1'
    ]);

$form = ActiveForm::begin([
    'id' => 'form1',
    'action' => Url::to(['my-controller/work1']),
    'options' => [
        'data-pjax' => 'pjax1'
            ]
    ]);

$ParamsInput = [];
$ParamsInput['class'] = 'btn btn-success';
$ParamsInput['formaction'] = Url::to(['my-controller/work1', 'myParam' => false]);
echo Html::submitButton('Добавить', $ParamsInput);

echo Html::hiddenInput('myParam', false);
$ParamsInput['name'] = 'myParam';
$ParamsInput['value'] = 'true';
$ParamsInput['formaction'] = Url::to(['my-controller/work1', 'myParam' => true]);
echo Html::submitButton('Заменить', $tmpParamsInput);

ActiveForm::end(); 
Pjax::end();
  • Вопрос задан
  • 143 просмотра
Решения вопроса 1
slo_nik
@slo_nik Куратор тега Yii
Контролер
public function actionIndex()
    {
        if(Yii::$app->request->isAjax){
            if(Yii::$app->request->post('myParam') == 1){
                $param = 'Ответ сервера - ' . Yii::$app->request->post('myParam');
            }
            else{
                $param = 'Ответ сервера - ' . Yii::$app->request->post('myParam');
            }
            return $this->asJson($param);
        }

        return $this->render('index');
    }

Вид
<?php
$form = ActiveForm::begin([
    'id' => 'form1',
    'action' => Url::to(['images/index']),
    'options' => [
        'data-pjax' => 'pjax1'
    ]
]);

echo Html::submitButton('Добавить', ['data' => ['param' => 1]]);

echo Html::hiddenInput('myParam', false);

echo Html::submitButton('Заменить', ['data' => ['param' => 0]]);

ActiveForm::end();
?>
<div id="result"></div>
<?php
$this->registerJs("
  $('button').on('click', function(e){
     e.preventDefault();
     var url = $(this).closest('form').attr('action');
     var param = $(this).attr('data-param')
     $.ajax({
       url: url,
       type: 'POST',
       data: {myParam: param},
       success: function(data){
          $('#result').text(data)
       }
     })
  })
")
?>
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@LemonFox
stateless mind
У html-формы не может быть 2 разных action.
Можно сделать для 2х submitButton одинаковый name и разные value

<input type="submit" name="action" value="Update" />
<input type="submit" name="action" value="Delete" />


В контроллере разруливать исходя из этого параметра.
Ответ написан
Ваш ответ на вопрос

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

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