@Silverviql

Как завершить выполнение скрипта на jquery?

В модальном окне с 2 input формами подключен ajax запрос на перехват нажатия кнопки отправки и пост запросом передает данные в бд.
Проблема в том что скрипт не завершается. А висит и при следующим вызове модального окна он отработает уже 2 раза, вызвав еще раз отработает 3 раза и т.д.
В консоле сам скрипт и висит.

Модальное окно
<?php
use kartik\widgets\DateTimePicker;
use yii\helpers\Html;
use yii\widgets\ActiveForm;

/** @var $shipping app\models\Courier */
/** @var $model app\models\Zakaz */

?>
<div class="zakaz-reminderForm">
    <?php $form = ActiveForm::begin([
        'id' => 'shippingZakaz',
    ]); ?>
    <?= $form->field($comment, 'id_user')->hiddenInput(['value' => Yii::$app->user->id])->label(false) ?>
    <?= $form->field($comment, 'id_zakaz')->hiddenInput(['value' => $model])->label(false) ?>

    <?= $form-> field($comment, 'comment')->textInput(['placeholder' => 'Что', 'class' => 'inputForm', 'style' => 'float:left'])->label(false) ?>

    <?= $form->field($comment, 'date')->widget(DateTimePicker::className() ,[
        'pluginOptions' => [
            'autoclose'=>true,
            'startDate' => 'php Y-m-d H:i:s',
            'todayBtn' => true,
            'todayHighlight' => true,
        ],
        'options' => [
            'placeholder' => 'Срок',
        ],
    ])->label(false) ?>

    <div class="form-group">
        <?= Html::submitButton('Отправить', ['class' => 'action']) ?>
    </div>
    <?php ActiveForm::end(); ?>
    <?php
    $js = <<<JS
    $('body').on('beforeSubmit', 'form', function(){
	 var data = $(this).serialize();
	 $.ajax({
	    url: '/frontend/web/comment/create-reminder?id=$model', 
	    type: 'POST',
	    data: data,
	    success: function(res){
	       console.log(res);
	    },
	    error: function(){
	       alert('Error!');
	    }
	 });
	 $('.trigger success-trigger').trigger('click');
	 $('#modalReminder').modal('hide'); //закрытие модального окна.
/*	 alert('Напоминание создано!');*/
	
	 return false;
     });
JS;
    $this->registerJs($js);

    ?>

</div>


5b2748654478b094353032.png
  • Вопрос задан
  • 186 просмотров
Решения вопроса 1
sergiks
@sergiks Куратор тега JavaScript
♬♬
$('body').on('beforeSubmit', 'form', function(){
тут вешается слушатель события перед отправкой формы на верхний элемент DOM'а, <body>. С закрытием модального окна он не исчезает и слушатель, повешенный на него, остаётся.

Следующее открытие модального окна повесит на body ещё один слушатель – уже два.

Попробуйте .on(...) заменить на .one(...) – это костыль, т.к. если форму не отправят, а только закроют модалку, в следующий раз отправится дважды.

Правильно – делать .off() при закрытии модалки.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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