【问题标题】:How can I move alert message div out of <form> tag如何将警报消息 div 移出 <form> 标签
【发布时间】:2016-07-11 10:12:43
【问题描述】:

我正在尝试一个代码,其中有一个表格可以接受订阅时事通讯的电子邮件地址;

当警报消息显示在空白字段或无效的电子邮件提交时,会在表单标签内创建警报消息div;我希望消息 div 脱离表单标签。以下是正在使用的代码;

JAVASCRIPT

// newsletter

    (function(){

        var subscribe = $('#subscribe');
        subscribe.append('<div class="message_container_subscribe"></div>');
        var message = $('.message_container_subscribe'),text;

        subscribe.on('submit',function(e){
            var self = $(this);

            if(self.find('input[type="email"]').val() == ''){
                text = "Please enter your e-mail!";
                message.html('<div class="alert_box color_red r_corners error"><i class="fa fa-exclamation-triangle"></i> '+text+'</div>')
                    .slideDown()
                    .delay(4000)
                    .slideUp(function(){
                        $(this).html("");
                    });

            }else{
                self.find('span.error').hide();
                $.ajax({
                    type: "POST",
                    url: "newsletter.php",
                    data: self.serialize(), 
                    success: function(data){
                        if(data == 1){
                            text = "Your email has been sent successfully!";
                            message.html('<div class="alert_box r_corners color_green success"><i class="fa fa-check-square"></i> '+text+'</div>')
                                .slideDown()
                                .delay(4000)
                                .slideUp(function(){
                                    $(this).html("");
                                })
                                .prevAll('input[type="email"]').val("");
                        }else{
                            text = "Invalid email address!";
                            message.html('<div class="alert_box color_red r_corners error"><i class="fa fa-exclamation-triangle"></i><p>'+text+'</p></div>')
                                .slideDown()
                                .delay(4000)
                                .slideUp(function(){
                                    $(this).html("");
                                });
                        }
                    }
                });
            }
            e.preventDefault();
        });

    })();

HTML

<form action="newsletter.php" method="post" name="subscribe-form" id="subscribe" class="subscribe-form">
                    <input type="email" placeholder="Your email address" id="emailnews" class="email" name="emailnews">
                    <button type="submit" value="Submit" class="submit">Subscribe</button>
                </form>

SNAPSHOT FROM CODE INSPECT IN CHROME

【问题讨论】:

  • 那你为什么不把它放在表格外面呢?
  • 嗨,但我没有在 html 表单中看到任何这样的 div。它是通过 javascript 注入的,我无法找到出路。谢谢。
  • 将其附加到表单外的不同元素。

标签: javascript html forms alert message


【解决方案1】:

您可以使用jQuery after() 代替append。像这样:

$("form").after('&lt;div class="message_container_subscribe"&gt;&lt;/div&gt;');

// newsletter

    (function(){

        var subscribe = $('#subscribe');
        $("form").after('<div class="message_container_subscribe"></div>');
        var message = $('.message_container_subscribe'),text;

        subscribe.on('submit',function(e){
            var self = $(this);

            if(self.find('input[type="email"]').val() == ''){
                text = "Please enter your e-mail!";
                message.html('<div class="alert_box color_red r_corners error"><i class="fa fa-exclamation-triangle"></i> '+text+'</div>')
                    .slideDown()
                    .delay(140000)
                    .slideUp(function(){
                        $(this).html("");
                    });

            }else{
                self.find('span.error').hide();
                $.ajax({
                    type: "POST",
                    url: "newsletter.php",
                    data: self.serialize(), 
                    success: function(data){
                        if(data == 1){
                            text = "Your email has been sent successfully!";
                            message.html('<div class="alert_box r_corners color_green success"><i class="fa fa-check-square"></i> '+text+'</div>')
                                .slideDown()
                                .delay(4000)
                                .slideUp(function(){
                                    $(this).html("");
                                })
                                .prevAll('input[type="email"]').val("");
                        }else{
                            text = "Invalid email address!";
                            message.html('<div class="alert_box color_red r_corners error"><i class="fa fa-exclamation-triangle"></i><p>'+text+'</p></div>')
                                .slideDown()
                                .delay(4000)
                                .slideUp(function(){
                                    $(this).html("");
                                });
                        }
                    }
                });
            }
            e.preventDefault();
        });

    })();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form action="newsletter.php" method="post" name="subscribe-form" id="subscribe" class="subscribe-form">
                    <input type="email" placeholder="Your email address" id="emailnews" class="email" name="emailnews">
                    <button type="submit" value="Submit" class="submit">Subscribe</button>
                </form>

【讨论】:

    【解决方案2】:

    在表单之外使用 div 并编辑您的 js 代码,例如

    (".message_container_subscribe").html("Your Message Here")
    

    在你想要的地方使用它 希望这一切正常。

    【讨论】:

      【解决方案3】:

      您的警报消息 div 现在附加在表单中,并带有以下行:

      subscribe.append('<div class="message_container_subscribe"></div>');
      

      您可以通过设置以下内容在表单外简单地创建警报 div:

       subscribe.after('<div class="message_container_subscribe"></div>');
      

      现在警报消息 div 在表单之外,其余内容将按原样工作,消息将显示在表单之外。

      【讨论】:

      • 是的,np。我看到有人在我之前解决了这个问题,但我的回答只改变了一个词;)
      【解决方案4】:

      试试这个

      $('<div class="alert_box color_red r_corners error"><i class="fa fa-exclamation-triangle"></i><p>'+text+'</p></div>').insertAfter($('#subscribe'));
      

      【讨论】:

        猜你喜欢
        • 2012-08-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-05-27
        • 2013-07-18
        • 2020-05-30
        • 2014-11-23
        • 2018-06-27
        相关资源
        最近更新 更多