gpt4 book ai didi

php - Cakephp 表单必须提交两次才能工作

转载 作者:行者123 更新时间:2023-11-30 06:29:53 25 4
gpt4 key购买 nike

我正在尝试解决我一直无法理解的表单提交问题。当我第一次提交表单时,更改下拉列表的值后,$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 数组为空。如果我第二次提交,不做任何更改,该数组将包含我希望看到的内容。

在我的 Controller 中我有

if(isset($this->request->data['Refine']['state']))
{
$state = $this->request->data['Refine']['state'];
}

显然,如果数组为空,我在第一次提交表单时在状态变量中什么也得不到。

如果有人能阐明这种行为,我将不胜感激。我在创建表单时做错了什么吗?

此处要求的是与此表单一起使用的 js。这个想法是,如果“全部”复选框是为 Controller 中的区域和标签创建的第一个复选框,它只负责设置或清除复选框。

$(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")
}
});
});

希望对你有帮助

最佳答案

我注意到两件事:

1) 表单的 url: Controller 名称为小写且带下划线: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;
}
});

关于php - Cakephp 表单必须提交两次才能工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18391233/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com