Я пытаюсь разобраться в проблеме с формой submit, которую я не смог понять. Когда я впервые отправлю форму, после изменения значения выпадающего списка массив $this->request->data
пуст. Если я снова отправлю, я увижу, чего бы я ожидал. Это происходит каждый раз, когда я изменяю ни одно из выпадающих списков формы.Форма Cakephp должна быть отправлена дважды, чтобы работать
Вот форма:
<?php
echo $this->Form->create('Refine', array('url' => '/ServiceDirectoryResults/refine'));
echo $this->Form->input('state', array(
'type' => 'select',
'label' => 'State',
'options' => $all_states,
'selected' => array('state_selected', $state_selected),
'id' => 'state',
));
echo $this->Form->input('solution', array(
'type' => 'select',
'label' => 'Solution',
'options' => $solutions,
'selected' => array('selected', $solution),
'id' => 'solutions',
));
echo $this->Form->input('region', array(
'before' => '<fieldset id="Region">',
'multiple' => 'checkbox',
'options' => $regions,
'selected' => $reg_selected,
'after' => '</fieldset>'
));
echo $this->Form->input('tags', array(
'before' => '<fieldset id="TagBox">',
'multiple' => 'checkbox',
'options' => $narrow,
'selected' => $tag_selected,
'after' => '</fieldset>'
));
echo $this->Form->end('Refine Search');
?>
Форма предоставления штрафа. Если выпадающие списки состояний или решений изменены и форма отправлена, массив $this->request->data
пуст. Если я отправлю второй раз, не изменяя ничего, массив содержит то, что я ожидаю увидеть.
В моем контроллере у меня есть
if(isset($this->request->data['Refine']['state']))
{
$state = $this->request->data['Refine']['state'];
}
Очевидно, что если массив пуст, я ничего не получаю в переменном состоянии в первый раз форма передаются.
Буду признателен, если кто-нибудь сможет пролить свет на это поведение. Я сделал что-то неправильно в моем создании формы?
Как запрошено здесь js, который используется с этой формой. Идея состоит в том, что он просто позаботится о настройке или очистке флажков, если установлен флажок «Все», который является первым флажком, созданным для обоих регионов и тегов в контроллере.
$(document).ready(function(){
$("#RefineRegion0").click(function(){
if ($("#Region #RefineRegion0").is(':checked')) {
$("#Region input[type=checkbox]").each(function (e) {
$(this).prop("checked", true);
});
} else {
$("#Region input[type=checkbox]").each(function (e) {
$(this).prop("checked", false);
});
}
});
$("#RefineTags0").click(function(){
if ($("#TagBox #RefineTags0").is(':checked')) {
$("#TagBox input[type=checkbox]").each(function (e) {
$(this).prop("checked", true);
});
} else {
$("#TagBox input[type=checkbox]").each(function (e) {
$(this).prop("checked", false);
});
}
});
$("#RefineViewForm").submit(function(){
if($('#state').val() == "" || $('#solutions').val() == ""){
alert("Please select a State and Solution before continuing")
}
});
});
Надежда, что помогает
Не знаю, что пошло не так. но просто попробуйте удалить атрибут «selected» из параметров ввода формы, поскольку он устарел в ** cakephp2.0 **. вы можете проверить [здесь] (http://book.cakephp.org/2.0/en/core-libraries/helpers/form.html#updates) –
напишите свой код js –
Я отредактировал мой оригинальный вопрос и добавил JS, который используется в этой форме. – rickl