在同一页面上具有相同ID的多个AJAX表单

时间:2015-06-15 01:49:50

标签: javascript php jquery ajax forms

我在同一页面(顶部和底部)有两个AJAX新闻订阅表单。两种形式都具有相同的ID。顶部表单完美无缺,但我无法将警报消息显示在底部表单中。

我找到了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._-]+@[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 个答案:

答案 0 :(得分:0)

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

  

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

而是有两个单独的id并在绑定到submit事件时在一个jQuery调用中引用它们:

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

并在您的HTML中:

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

<form id="newsletter_bottom" ...>
</form>
相关问题