在这种情况下,我有一个简单的表单,不是由Zend生成的:
<form id='com-prefs'>
<input type='checkbox' name='accept-sms' />
<input type='checkbox' name='accept-phone' />
<input type='checkbox' name='accept-email' />
<!-- etc -->
</form>
表单比这长,但它基本上只是更多的输入。 Zend_Form的表单创建看起来很臃肿,因为我将与其他人一起处理这个项目,所以我不觉得使用Zend表单创建使事情复杂化。但是,Zend_Form的验证似乎更有用,我想通过Ajax使用它。
我的问题是,如何使用jQuery(或常规JS)获取上述表单,并将其转换为可以轻松使用以下内容的Zend_Form:
$form->isValid();
serializeArray()是我想去的路线吗?
编辑:使用ZF1
答案 0 :(得分:0)
我在寻找的确是serializeArray()。 Zend_Form验证器接收'name'=&gt;的数组。 '值'=&GT; =等。
.serializeArray()创建一个多维数组,表示其值已设置的表单中的所有元素(或者在复选框和单选按钮的情况下,其值为'checked')。
答案 1 :(得分:0)
我做了些什么可能对你有用。
在 IndexController.php 中添加以下操作:
public function checkformAction(){
$this->_helper->layout()->disableLayout();
$this->_helper->viewRenderer->setNoRender(true);
if($this->getRequest()->isPost()){
$data = $this->getRequest()->getPost();
$form = new $data["zend_form"]();
unset($data["zend_form"]);
echo $form->processAjax($this->getRequest()->getPost());
}else{
echo false;
}
}
在全局Javascript文件中,我添加了这个函数:
function validate(form,zend_form){
$.ajax({
url: '/index/checkform/',
data: $(form).serialize()+'&zend_form='+zend_form,
type: 'post',
success: function(response) {
response = $.parseJSON(response);
if(response == true){
$(form).removeAttr("onsubmit");
$("#submit").click();
}
$("ul.errors").remove();
$.each(response,function(key,value){
var errorlist = '<ul class="errors">';
$.each(value,function(key,value){
errorlist += '<li>'+value+'</li>';
});
errorlist += '</ul>';
$("#"+key).after(errorlist);
});
}
});
return false;
}
最后在init()函数的每个表单类中添加 onsubmit 属性:
class Frontend_Form_Doc extends Zend_Form
{
public function init()
{
$this->setMethod('post');
$this->setAttrib("onsubmit","return validate(this,'Frontend_Form_Doc')");
.....
}
}