我正在尝试使用我无法理解的表单提交来解决问题。当我第一次提交表单时,在更改下拉列表的值后,$this->request->data
数组为空。如果我再次提交,我会看到我的期望。每当我更改表单上的任何一个下拉列表时都会发生这种情况。
以下是表格:
<?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 :(得分:0)
我注意到两件事:
1)表单的url:控制器名称是小写的并且是下划线:service_directory_results。请参阅cakephp名称对话: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上不要发送帖子添加return false; (也缺少一个;)
$("#RefineViewForm").submit(function(){
if($('#state').val() == "" || $('#solutions').val() == ""){
alert("Please select a State and Solution before continuing");
return false;
}
});