preventDefault()直到确认

时间:2014-08-10 22:17:11

标签: javascript jquery ruby-on-rails

电子邮件重置表单,显示一个带有input: email的确认框,要求用户确认电子邮件。 (拼写/等)如果用户点击确定表格,则应正常提交。如果用户点击取消,则允许他们更改电子邮件。

  $(function(){
    $('form').on('submit',function(e){
      e.preventDefault();

      var email = $('#user_email').val();
      if(email.length == 0){
        alert('Please enter your email address.');
      } else {
        confirm('Are you sure you want to reset the password for: '+ email);
        // if confirm [ok] submit the form!!!!
      } 
    });
  });

附带问题:我可以将电子邮件输入值传递给rails input helper中的confirm属性吗? (这样我就可以避免编写额外的js

e.g。

  <%= button_tag type: 'submit', id: "email-confirm", confirm: "Are you sure you want to reset the password for: #{email-input-value}" do %>
    Send me reset password instructions
  <% end %>

1 个答案:

答案 0 :(得分:-1)

使用e.preventDefault()会阻止表单提交,也无法撤消。您可以在此处理程序中使用return,而返回false会阻止默认行为(与e.preventDefault()相同)会阻止事件传播(与e.stopPropagation()相同。由于confirm根据用户点击的按钮返回布尔值,因此您只需return该值。此外,您希望在未填写电子邮件时阻止提交(在alert之后),因此请在其中添加return false;。这是一个例子:

$(function(){
  $('form').on('submit',function(e){
    var email = $('#user_email').val();
    if(email.length == 0){
      alert('Please enter your email address.');
      return false;
    } else {
      return confirm('Are you sure you want to reset the password for: '+ email);
    } 
  });
});

DEMO: http://jsfiddle.net/tyaw1az1/