2015-06-15 125 views
0

我在同一页面(顶部和底部)有两个AJAX时事通讯订阅表单。两种表格都有相同的ID。顶部表单完美地工作,但我无法让警报消息出现在底部表单中。在同一页面上具有相同ID的多个AJAX表单

我发现this question,但不知道如何在我的代码中实现答案。

这里的形式:

 <div class="newsletter"> 
      <form id="newsletter" class="newsletter-signup" action="" method="POST" accept-charset="UTF-8"> 
       <input id="hero-section-newsletter-email-input" type="email" name="email"> 
       <button class="button" type="submit"> 
        Subscribe 
       </button> 
       <div id="newsletter-alert" style="display: none;" data-alert></div> 
      </form> 
     </div> 

这里是jQuery的:

(function() { 
    'use strict'; 

    var newsletterAlert = function(message) { 
    $('#newsletter-alert').text(message); 
    }; 

    var isValidEmail = function(email) { 
    var pattern = new RegExp(/^[+a-zA-Z0-9._-][email protected][a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/i); 
    return pattern.test(email); 
    }; 

    $('#newsletter').on('submit', function(e) { 
    var data, 
     $form = $(this), 
     $email = $form.find('input[type="email"]'); 

    e.preventDefault(); 
    $('#newsletter-alert').show(); 

    if (!isValidEmail($email.val())) { 
     newsletterAlert('Looks like you entered an invalid email address! Please try again.'); 
    } else { 
     newsletterAlert('Subscribing you now...'); 
     data = $form.serialize(); 

     $.ajax({ 
     url: 'PATH_TO_SUBSCRIBE_PHP', 
     type: 'post', 
     data: data, 
     success: function(msg) { 
      if (msg === 'success') { 

      newsletterAlert('Success! Please check your email to confirm.'); 
      $email.val(''); 
      } else { 
      newsletterAlert(msg); 
      } 
     }, 
     error: function(msg) { 
      newsletterAlert('Error! ' + msg.statusText); 
     } 
     }); 
    } 
    }); 
})(); 

任何帮助,将不胜感激。谢谢

+1

有任何具有相同'id'的元素都会使第二个元素呈现惰性。给你的其他形式一个不同的ID或使用'类'代替 – Rasclatt

回答

0

不要对顶部和底部表单使用相同的ID。

id在文档中必须是唯一的 - 请参阅MDN Docs

而是有两个单独的id的,并在一个jQuery的呼叫参考他们两个当你绑定到submit事件:

$('#newsletter_top, #newsletter_bottom').on('submit', function(e) { 
    // ... 
}); 

,并在你的HTML:

<form id="newsletter_top" ...> 
</form> 

<form id="newsletter_bottom" ...> 
</form> 
+0

非常感谢!我这样做,它工作正常,除非我提交底部表单,警报出现在底部和顶部的形式。任何想法,为什么这可能是? – user3733904

+0

@ user3733904可能是同样的问题,你也在'newsletter-alert' div上重复'id'。通过分割'id =“newsletter-alert_top”'和'id =“newsletter-alert_bottom”' –

+0

做同样的事情是的,对不起,我应该在我的回复中提到我已经分离了警报的ID。谢谢你的帮助 – user3733904

相关问题