неожиданный сабмит формы
неожиданный сабмит формы
Доброго дня!
Есть форма, среди полей формы вставлен div c гридом с фильтрами. После ввода любого значения в фильтр, по нажатию enter, либо по выходу из фокуса, поиска не происходит, а происходит сабмит всей формы. Это происходит независимо от того, обернут ли грид в pjax, или нет. Хотелось бы понять, почему это происходит и как с этим бороться.
Есть форма, среди полей формы вставлен div c гридом с фильтрами. После ввода любого значения в фильтр, по нажатию enter, либо по выходу из фокуса, поиска не происходит, а происходит сабмит всей формы. Это происходит независимо от того, обернут ли грид в pjax, или нет. Хотелось бы понять, почему это происходит и как с этим бороться.
Re: неожиданный сабмит формы
код формы
код грида:
ну и к примеру, апдейт в контроллере:
Код: Выделить всё
<?php $form = ActiveForm::begin(); ?>
<?= $form->field($model, 'name')->textInput(['maxlength' => 45]) ?>
....
<div class="col-sm-1">
<?= Html::button('<span class="glyphicon glyphicon-list"></span>',['id' => 'showDescrGridBtn',
'data-value'=> Yii::$app->getUrlManager()->createUrl(['rooms/choosedescr']),
'class'=>'btn btn-info descrBtn',
'title'=> 'Choose description']);
$js=new \yii\web\JsExpression("
$('#showDescrGridBtn').click(function(){
$('#descrView').show();
$.ajax({
type: 'POST',
url: $(this).data('value'),
success: function(html){
$('#descrView').html(html);
}
});
});
");
<div class="col-sm-12" style="display: none" id="descrView"></div>
.....
<div class="form-group">
<?= Html::submitButton($model->isNewRecord ? Yii::t('app', 'Create') : Yii::t('app', 'Update'), ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?>
</div>
<?php ActiveForm::end(); ?>
Код: Выделить всё
<?php \yii\widgets\Pjax::begin(['id'=>'descrGrid', 'enablePushState' => false, 'timeout' => 3000]); ?>
<?= GridView::widget([
'dataProvider' => $dataProvider,
'filterModel' => $searchModel,
'columns' => [
['class' => 'yii\grid\SerialColumn'],
//'id',
[
'attribute' => 'description',
'format' => 'html',
],
['class' => 'yii\grid\ActionColumn',
'template' => '{choose}',
'buttons' => [
'choose' => function($url, $model, $key){
$url = Yii::$app->getUrlManager()->createUrl(['rooms/choosedescr']);
return Html::a('<span class="glyphicon glyphicon-ok"></span>', $url, [
'title' => Yii::t('yii', 'Choose'),
'data-description' => $model->description,
'data-id' => $model->id,
'class' => 'okbtn',
'data-pjax' => '0',
'data-value' => $url,
]);
}
]
],
],
]);
$js=new \yii\web\JsExpression("
$('.okbtn').click(function(event){
event.preventDefault();
var descr=$(this).data('description');
var id=$(this).data('id');
$('#rooms-descriptionid').val(id);
$('#dynamic-description').html(descr);
$.ajax({
type: 'POST',
url: $(this).data('value'),
success: function(html){
$('#descrView').html(html);
}
});
$('#descrView').hide();
$('#dynamic-description').show();
});
");
$this->registerJs($js);
?>
<?php \yii\widgets\Pjax::end(); ?>
Код: Выделить всё
public function actionUpdate($id)
{
$model = $this->findModel($id);
$dataProvider = new ActiveDataProvider(['query' => $model->getPriceplans()]);
if ($model->load(Yii::$app->request->post()) && $model->save()) {
return $this->redirect(['view', 'id' => $model->id]);
} else {
return $this->render('update', [
'model' => $model,
'dataProvider' => $dataProvider,
]);
}
}
Последний раз редактировалось Nobilik 2015.02.24, 16:49, всего редактировалось 1 раз.
Re: неожиданный сабмит формы
желательно корректный код, иначе ничего не понятно
вижу
<?php \yii\widgets\Pjax::end(); ?>
а где же начало?
вижу
<?php \yii\widgets\Pjax::end(); ?>
а где же начало?
Re: неожиданный сабмит формы
криво скопировал, потерял первую строчку. поправил в предыдущем посте.astronin писал(а):желательно корректный код, иначе ничего не понятно
вижу
<?php \yii\widgets\Pjax::end(); ?>
а где же начало?
Re: неожиданный сабмит формы
пропишите для submitButton:
'data-pjax' => '0', или 'data-pjax' => false
возможно pjax захватывает вашу форму
'data-pjax' => '0', или 'data-pjax' => false
возможно pjax захватывает вашу форму
Re: неожиданный сабмит формы
это я уже пробовал. эффекта нет. да и странно, не должен pjax вне обертки события видеть
Re: неожиданный сабмит формы
грид на нету создаёт свою форму для фильтра. а форма в форме никогда ни к чему хорошему не приводила. выносите грид из формы.
Re: неожиданный сабмит формы
не фактNobilik писал(а):это я уже пробовал. эффекта нет. да и странно, не должен pjax вне обертки события видеть
скорей всего у вас там наслоение селекторов для js и они путаются
попробуйте сделать как посоветовали выше
еще можете разобраться в id форм и других элеметов, и области их видимости
Re: неожиданный сабмит формы
Попробую. Дурацкий вопрос, не имеющий отношения к Yii2. Как вынести грид из формы, при этом сохранив его позицию на экране?
Re: неожиданный сабмит формы
Много вариантов, зависит от вашего шаблона. Например пустить ниже и сделать отрицательный margin-top или использовать абсолютное позиционирование.Nobilik писал(а):Попробую. Дурацкий вопрос, не имеющий отношения к Yii2. Как вынести грид из формы, при этом сохранив его позицию на экране?
Мой видео блог посвященный yii "Yii2 для Блондинок и Чайников: уроки, заметки, гайды"
Re: неожиданный сабмит формы
для начала объясните, как вы используете грид внутри формы?
а вариантов решения вашего вопроса много.
можно форму разделить на две, дополнив каждую недостающими хидденами из остальных. при сабмите заполняя их с помощью жс одну из другой. такой вариант используется в инет магазинах, где одна форма с фильтрами есть сбоку и другая вверху над товарами.
либо же если это к примеру чекбоксы у вас в гриде, то тоже собирайте их с помощью жс, пихайте в хиддены формы и отправляйте её.
а вариантов решения вашего вопроса много.
можно форму разделить на две, дополнив каждую недостающими хидденами из остальных. при сабмите заполняя их с помощью жс одну из другой. такой вариант используется в инет магазинах, где одна форма с фильтрами есть сбоку и другая вверху над товарами.
либо же если это к примеру чекбоксы у вас в гриде, то тоже собирайте их с помощью жс, пихайте в хиддены формы и отправляйте её.
Re: неожиданный сабмит формы
Делаю проект для отеля. Это факультативно, просто для изучения yii2. Тему взял, поскольку сделал то же самое на wp для знакомых.... В данный момент ковыряю бэкэнд, конкретно эта часть - заведение номеров. У номера есть какое-то количество уникальных полей - они хранятся в таблице Rooms, а есть поля, которые повторяются во многих номерах, т.е. например, описание номера, тарифы, которые зависят от календаря, скидки, тарифы на дополнительные кровати. Все вышеперечисленное - это гриды, т.е. при выборе определенного значения из них, в таблицу Rooms при сохранении записывается соответствующий id для связи. При этом грид с описаниями реализован именно как вы говорите - записывает значение в скрытое поле.
Вобщем пошел читать про варианты позиционирования.
Вобщем пошел читать про варианты позиционирования.
Re: неожиданный сабмит формы
Дошли руки попробовать вынести грид вне формы. Эффект нулевой! Сабмит формы вместо поиска по гриду. Подскажите, чем посмотреть, что происходит. Что-то типа дебага для js.
Re: неожиданный сабмит формы
попробуйте использовать этот компонент
https://github.com/AstRonin/yii2_improv ... s/Pjax.php
укажите вручную $basePoint-ы для каждого pjax, чтоб ограничить его поле действия, может быть поможет
https://github.com/AstRonin/yii2_improv ... s/Pjax.php
укажите вручную $basePoint-ы для каждого pjax, чтоб ограничить его поле действия, может быть поможет