我對錶單有一個表單和驗證。爲了保存數據,我使用了一個函數來使用ajax保存它。這是我的形式在Zend中保存之前確認驗證框架工作1.12
<form name="enquiry_form" method="post" id="enquiry_form">
Full Name: <input name="name" id="name" type="text" pattern="[A-Za-z ]{1,20}" oninvalid="setCustomValidity('Plz enter only Alphabets ')" onchange="try{setCustomValidity('')}catch(e){}">
Email: <input name="email" id="email" type="email" oninvalid="setCustomValidity('Plz enter valid email ')" onchange="try{setCustomValidity('')}catch(e){}" required >
Phone: <input name="mobile" id="mobile" type="text" pattern="[0-9]{10,12}" oninvalid="setCustomValidity('Plz enter valid Mobile Number ')" onchange="try{setCustomValidity('')}catch(e){}" required >
Query: <textarea name="query" id="query" class="" required></textarea></li>
<input type="submit" value="SUBMIT" id="enq_submit" onclick="getEnquiryForm(); ">
</form>
這是我getEnquiryForm()函數:
getEnquiryForm: function()
{
var url = window.location.protocol+'//'+window.location.host+'/'+path.base_path+'/ajax/save-enquiry'; //url path
new Ajax.Request(url,
{
parameters: $('enquiry_form').serialize(),
method:'POST',
onSuccess: function(transport) {
//alert(transport.responseText);
},
onFailure: function(transport) {
alert('Could not connect to Propladder Server for this request');
},
onComplete: function(transport) {
}
});
},
然後我ajaxController中,我有saveEnquiry()行動在url上面提到的功能
public function saveEnquiryAction()
{
$data = array();
$data['name'] = $this->_getParam('name');
$data['email'] = $this->_getParam('email');
$data['mobile'] =$this->_getParam('mobile');
$data['query'] =$this->_getParam('query');
$mapper = new Application_Model_EnquiryMapper();
$mapper->save($data);
}
當我點擊提交按鈕,如果驗證是錯誤的,它立即移動到函數並保存在數據庫中,並顯示驗證警報,並在輸入驗證後真正的數據再次被保存。由此我的表單被多次保存。取而代之的是光標應該被移動到getEnquiryForm()或saveEnquiryAction()只有當所有的表單驗證爲真