2013-08-22 4 views
2

Я пытаюсь разобраться в проблеме с формой 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") 
     } 
    }); 
}); 

Надежда, что помогает

+0

Не знаю, что пошло не так. но просто попробуйте удалить атрибут «selected» из параметров ввода формы, поскольку он устарел в ** cakephp2.0 **. вы можете проверить [здесь] (http://book.cakephp.org/2.0/en/core-libraries/helpers/form.html#updates) –

+0

напишите свой код js –

+0

Я отредактировал мой оригинальный вопрос и добавил JS, который используется в этой форме. – rickl

ответ

0

я заметил две вещи:

1) URL форме в: имена контроллеров строчными и подчеркнул: service_directory_results. См. Конфискации названий торта: http://book.cakephp.org/2.0/en/getting-started/cakephp-conventions.html. Но я думаю, что его лучше использовать массив для URL, так что ваши маршруты можно совпавшие:

echo $this->Form->create('Refine', array('url' => array('controller' => 'service_directory_results', 'action' => 'refine'))); 

2) На вашем Js, если эти поля пустыми не отправлять почту, добавив возвращение ложной; (также отсутствует a;)

$("#RefineViewForm").submit(function(){ 
    if($('#state').val() == "" || $('#solutions').val() == ""){ 
     alert("Please select a State and Solution before continuing"); 
     return false; 
    } 
}); 
Смежные вопросы