【发布时间】:2010-04-21 15:06:57
【问题描述】:
我有一个表格(大大简化了):
<form action='http://example.com/' method='post' name='event_form'>
<input type='text' name='foo' value='3'/>
<input type='submit' name='event_submit' value='Edit'/>
</form>
我有一个类“EventForm”来处理表单。主要方法 process() 如下所示:
public function process($submitname=false){
$success=false;
if ($submitname && isset($_POST[$submitname])){ //PROBLEM: isset($_POST[$submitname] is always FALSE for some reason
if($success=$this->ruler->validate()){//check that dependancies are honoured and data types are correct
if($success=$this->map_fields()){//divide input data into Event, Schedule_Element and Temporal_Expression(s)
$success=$this->eventholder->save();
}
}
} else {//get the record from the db based on event_id or schedule_element_id
foreach($this->gets as $var){//list of acceptable $_GET keys
if(isset($_GET[$var])){
if($success= $this->__set($var,$_GET[$var])) break;
}
}
}
$this->action=(empty($this->eventholder->event_id))? ADD : EDIT;
return $success;
}
提交表单时,会发生这种情况:$form->process('event_submit'); 尽管出于某种原因,isset($_POST['event_submit']) 总是评估为 FALSE。有谁知道为什么?
ETA:在完成建议后,JQuery.validate() 似乎对表单提交产生了意想不到的影响。除提交按钮外,所有字段均已提交。这似乎是这个 JQuery 的错:
$("form[name='event_form']").validate({
submitHandler: function(form) {
form.submit();
}
}};
关于如何确保提交按钮值被发送的任何想法?
【问题讨论】:
-
这个例子有多简单?如果您使用 JavaScript 和
submit()方法提交表单,那么任何提交按钮都不会被激活,因此不会是成功的控件,因此不会显示在表单数据中。 -
您确定 $submitname 输入正确并且与您的提交按钮的名称相对应吗?
-
你确定
'event_submit'被传递给$form->process()? -
@David Dorward:我认为这可能指向这个问题。我在提交时使用 JQuery.validate()。但我没有阻止标准提交操作。我的理解是 onSubmit 操作执行了 javascript,然后,除非被阻止,否则继续执行正常的表单操作。没有?
-
@Ilya Biruykov, @ax:
event_submit绝对是按钮的名称(经过多次验证,因为这也是我的第一个想法)。还验证了该方法接收按钮名称。
标签: php html forms syntax jquery-validate