непонятки с ActiveForm

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
guru_nemo
Сообщения: 68
Зарегистрирован: 2017.04.10, 21:28

непонятки с ActiveForm

Сообщение guru_nemo »

Код: Выделить всё

<?php
			$form = \yii\bootstrap\ActiveForm::begin([
                'action' => $buttons_array['but_array']['Мои заказы'],
				'options' => ['onsubmit' => 'return send_order();'],
				'method' => 'post',
				]);
				?>
            <input id="order_input" type="hidden" name="orders">
			<button class="btn btn-primary" style="margin: 5px auto;display:block;"
                        data-toggle="popover"
                        data-trigger="hover"
                        data-placement="auto bottom"
                        data-content="Чтобы сделать заказ, нажмите эту кнопку."
                        	
            </button>
            <?php \yii\bootstrap\ActiveForm::end();?>
после нажатия кнопки, срабатывает функция js - send_order(), она собирает данные, крепит их к input id=order_input и отправляет на сервер. Всё доходит нормально, но почему-то перед отправкой два раза срабатывает функция js - send_order()

js - send_order()

Код: Выделить всё

function send_order()
{
	var order = JSON.stringify(arr_total);
	document.getElementById('order_input').value = order;
	alert(order);
	return true;
}
Dark Gard
Сообщения: 79
Зарегистрирован: 2016.06.06, 11:39

Re: непонятки с ActiveForm

Сообщение Dark Gard »

Чем не устраивает конструкция?

Код: Выделить всё

$('#myform').on('beforeSubmit', function () {
    	var order = JSON.stringify(arr_total);
	document.getElementById('order_input').value = order;
});
Только в опции ActiveForm надо добавить id
guru_nemo
Сообщения: 68
Зарегистрирован: 2017.04.10, 21:28

Re: непонятки с ActiveForm

Сообщение guru_nemo »

Dark Gard писал(а): 2017.11.02, 21:18 Чем не устраивает конструкция?

Код: Выделить всё

$('#myform').on('beforeSubmit', function () {
    	var order = JSON.stringify(arr_total);
	document.getElementById('order_input').value = order;
});
Только в опции ActiveForm надо добавить id
хотелось бы без $ . Но спасибо за подсказку, попробую.
guru_nemo
Сообщения: 68
Зарегистрирован: 2017.04.10, 21:28

Re: непонятки с ActiveForm

Сообщение guru_nemo »

нашёл в сети:
This is expected: the first time the submission is caused by the click of the submit button; the second is caused by the validation code after the form is successfully validated.
guru_nemo
Сообщения: 68
Зарегистрирован: 2017.04.10, 21:28

Re: непонятки с ActiveForm

Сообщение guru_nemo »

Подскажите, как отключить валидацию на клиенте, чтобы не срабатывало событие после валидации?
пробую 'enableClientValidation' => false, нет эффекта.
Dark Gard
Сообщения: 79
Зарегистрирован: 2016.06.06, 11:39

Re: непонятки с ActiveForm

Сообщение Dark Gard »

Код: Выделить всё

ActiveForm::begin([
                    'id'      => 'myform',
                    'enableClientValidation'=>false,
                ]);
Это должно работать.
Вообще событий формы два, может будет полезным:

Код: Выделить всё

$('#myform').on('beforeValidate', function (event, messages, deferreds) {
    // Вызывается до валидации всей формы сразу после нажатия submit.
    // Тут можно провести дополнительные проверки.
});

$('#myform').on('beforeSubmit', function () {
    // Вызывается после удачной валидации всех полей и до того как форма отправляется на северер.
    // Тут можно отправить форму через AJAX. Не забудьте вернуть false для того, чтобы форма не отправлялась как обычно.
});
guru_nemo
Сообщения: 68
Зарегистрирован: 2017.04.10, 21:28

Re: непонятки с ActiveForm

Сообщение guru_nemo »

Dark Gard писал(а): 2017.11.03, 17:03

Код: Выделить всё

ActiveForm::begin([
                    'id'      => 'myform',
                    'enableClientValidation'=>false,
                ]);
Это должно работать.
Вообще событий формы два, может будет полезным:

Код: Выделить всё

$('#myform').on('beforeValidate', function (event, messages, deferreds) {
    // Вызывается до валидации всей формы сразу после нажатия submit.
    // Тут можно провести дополнительные проверки.
});

$('#myform').on('beforeSubmit', function () {
    // Вызывается после удачной валидации всех полей и до того как форма отправляется на северер.
    // Тут можно отправить форму через AJAX. Не забудьте вернуть false для того, чтобы форма не отправлялась как обычно.
});
если я пишу 'enableClientValidation'=>false, то события 'beforeValidate' и 'beforeSubmit' всё равно сработают?
Dark Gard
Сообщения: 79
Зарегистрирован: 2016.06.06, 11:39

Re: непонятки с ActiveForm

Сообщение Dark Gard »

beforeSubmit- точно сработает при 'enableClientValidation'=>false.
В случае enableClientValidation'=>true beforeSubmit может не сработать в случает получение формы по аяксу http://www.yiiframework.ru/forum/viewto ... 19&t=45487. По этому случаю хочу получить разъяснения, ибо это похоже на баг.
Насчет beforeValidate не знаю, не проверял.
Ответить