2013-03-14 125 views
0
<?PHP 
$attributes = array('class' => "profile_form", 'id' => "profile_form",'name'=>"profile_form"); 
echo form_open_multipart("$form_action",$attributes); 
?> 
<LABEL for='email'>E-Mail</LABEL> 
<INPUT type='text' id='email' name="email" class="w200" value='<?PHP echo $email;?>' remote="<?PHP echo base_url()."php/unique_email.php?id=$id"; ?>"> 
<DIV class='ca clr-lr'> 
<input type="submit" id="submitbutton" name="submitbutton" value="<?PHP echo $title;?>" class="pr mbutton"/> 
</DIV> 
</FORM> 

JQuery验证远程验证只有场改变

rules: { 
     email: { 
      required:true, 
      email:true 
     } 
    } 

这是我使用的验证电子邮件字段代码工作。如果我更改电子邮件字段或键入新值,它工作正常,但如果我只是提交表单,它会给我一个错误。经过简短的检查后,我发现如果我不编辑电子邮件字段,提交按钮不包含在发布数据中。

我做错了什么,请帮助。

这里是我的控制器代码,它可能有助于扩大调试范围。我正在检查submitbutton是否是发布数据的一部分。

if($this->input->post('submitbutton') !== false){ 
     if ($this->form_validation->run('admin_profile_form') == FALSE){ 
      $form=(array)$this->input->post(); 
      $data=array_merge($form,$data); 
     }else{ 
      //database fields 
      $database = array(
       'first_name' => $this->input->post('first_name'), 
       'last_name' => $this->input->post('last_name'), 
       'email' => $this->input->post('email'), 
       'phone' => $this->input->post('mobile') 
      ); 
      $user_id=$user->id; 
      $this->db->where('id',$user_id); 
      $this->db->update('users',$database); 
      $this->session->set_flashdata('message_type', 'info'); 
      $this->session->set_flashdata('message', 'Profile updated'); 
      redirect($this->homepage); 
      return; 
     } 
    } 

最后,Fabio Antunes建议的解决方案工作。

我改变了规则如下,并从输入字段远程删除内嵌

 email: { 
      required:true, 
      email:true, 
      remote: { 
       url: "php/unique_email.php", 
       async: false, 
       type: "post", 
       data: { id: $('#edit_id').val() } 
      } 
     } 

回答

-1

试试设置

$(/*your form*/).validate({ 
    onsubmit: true 
}) 
+0

请不要介意我问,但这会做什么。我要求确保它不会代码的其他部分。 – 2013-03-14 10:43:10

+0

这将永远验证您的表单提交,我希望这是你想要的 – Cris 2013-03-14 10:43:36

+0

它没有工作:( – 2013-03-14 11:00:29

1

编辑

至于你说你的代码已经工作你可以把这个你的js文件 你必须使用这个功能$("#profile_form").validate({})所以它v在提交并在keyup事件alidates

<script> 
$().ready(function() { 

     // validate signup form on keyup and submit 
     $("#profile_form").validate({ 
    rules: { 
     email: { 
      email: true 
     } 
    }, 
    messages: { 
     email: { 
      email: "Please provide a valid email" 
     } 
    } 
}); 
}); 

我注意到,在你看来,你有这样的

<INPUT type='text' id='email' name="email" class="w200" value='<?PHP echo $email;?>' remote="<?PHP echo base_url()."php/unique_email.php?id=$id"; ?>"> 

而是把这个

<INPUT type='text' id='email' name="email" class="w200" value='<?PHP echo $email;?>' remote="<?PHP echo base_url()."php/unique_email.php?id=".$id; ?>"> 

如果您注意你的$ id在字符串内

+0

事情是我的JavaScript代码是在一个.js文件,这就是为什么我使用远程属性。为php和html标签使用大写字母正是我感觉舒服的地方,没有什么特别的。你的代码看起来就像我的另一个版本,但我不确定类型:post。你能否在我的代码中指出错误,我将非常感激。提前致谢。我的代码工作正常,如果我在字段中输入的东西,它会导致问题,当我提交表单时,即使有一个有效的值,而不输入任何字段(即远程验证发射) – 2013-03-14 11:05:04

+0

我编辑了我的答案 – 2013-03-14 11:11:36

+0

两个版本,即嵌入字符串中的变量否则会在浏览器中产生相同的输出。但无论如何,我尝试了你的建议,但现在仍然运气。我已经添加了我的控制器代码,负责处理我的问题。也许我在那里做错了什么。 – 2013-03-14 11:23:58