23

我有一个页面使用 amodal来获取用户的电子邮件,我想将它添加到订阅者列表(这是一个 Django 模型)。这是模式代码:

<div id="notifications" class="modal hide fade" role="dialog" ara-labelledby="Notification" aria-hidden="true">
    <div class="modal-header">
        <button type="button" class="close" data-dismiss="modal" aria-hidden="true">X</button>
        <h4>Subscribe to Status Notifications</h4>
    </div>
    <form>
        <div class="modal-body">
            <input type="email" placeholder="email"/>
            <p>This service will notify you by email should any issue arise that affects your plivo service.</p>
        </div>
        <div class="modal-footer">
            <input type="submit" value="SUBMIT" class="btn"/>
        </div>
    </form>
</div>

我试图查看 Twitter Bootstrap 文档,但它确实很少。我想POST将数据发送到Django view that's listening forPOST` 请求。

这是最基本的。我regex用来在存储电子邮件 ID 之前比较电子邮件的格式。因此,如果电子邮件does not匹配,regex则视图返回一个Invalid Email. 所以我想在其内部通知用户modal。但我真的不知道如何做到这一点。有人请帮忙。


更新 1

根据 karthikr 的回答尝试了这个:

<form id="subscribe-email-form" action="/notifications/subscribe/" method="post">
    <div class="modal-body">
    <input type="email" placeholder="email"/>
        <p>This service will notify you by email should any issue arise that affects your service.</p>
    </div>
    <div class="modal-footer">
    <input id="subscribe-email-submit" type="submit" value="SUBMIT" class="btn" />
    </div>
</form>

<script>
    $(function(){
       $('subscribe-email-form').on('submit', function(e){
            e.preventDefault();
            $.ajax({
                url: "/notifications/subscribe/",
                type: "POST",
                data: $("subscribe-email-form").serialize(),
                success: function(data){
                    alert("Successfully submitted.")
                }
            });
       }); 
    });
</script>

有一些事情让我感到困惑。的onclick事件modal button呢?

我得到了它!我name="Email"在行中添加<input type="email" placeholder="email"/>

Django 字段正在寻找Email Field. 所以在我的 Django 视图中,代码是:

request.POST.get("Email", '')

因此,指定字段名称会有所帮助。但它会将我带到我发布的 URL。我希望它在同一页面中显示警报。


更新 2

所以第 1 部分正在工作。正如在帖子中一样。现在我需要显示成功或失败的模式。

这就是我正在尝试的。所以我用一个创建了这个模态textarea

<div id="subscription-confirm" class="modal hide fade in" aria-hidden="true">
    <div class="modal-header">
        <label id="responsestatus"></label>
    </div>
</div>

和 JavaScript:

<script>
    $(function(){
        $('#subscribe-email-form').on('submit', function(e){
            e.preventDefault();
            $.ajax({
                url: 'notifications/subscribe/',
                type: 'POST',
                data: $('#subscribe-email-form').serialize(),
                success: function(data){
                     $('#responsestatus').val(data);
                     $('#subscription-confirm').modal('show');    
                }
            });
        });
    });
</script>

所以模态出现了,但数据没有set进入label.modal

4

3 回答 3

22

您需要通过ajax提交来处理它。

像这样的东西:

$(function(){
    $('#subscribe-email-form').on('submit', function(e){
        e.preventDefault();
        $.ajax({
            url: url, //this is the submit URL
            type: 'GET', //or POST
            data: $('#subscribe-email-form').serialize(),
            success: function(data){
                 alert('successfully submitted')
            }
        });
    });
});

更好的方法是使用 django 表单,然后呈现以下代码段:

<form>
    <div class="modal-body">
        <input type="email" placeholder="email"/>
        <p>This service will notify you by email should any issue arise that affects your plivo service.</p>
    </div>
    <div class="modal-footer">
        <input type="submit" value="SUBMIT" class="btn"/>
    </div>
</form>

通过上下文 - 示例:{{form}}

于 2013-07-07T02:22:06.360 回答
7

我面临同样的问题,无法在没有 ajax 的情况下发布表单。但找到了解决方案,希望它可以帮助和某人的时间。

<form name="paymentitrform" id="paymentitrform" class="payment"
                    method="post"
                    action="abc.php">
          <input name="email" value="" placeholder="email" />
          <input type="hidden" name="planamount" id="planamount" value="0">
                                <input type="submit" onclick="form_submit() " value="Continue Payment" class="action"
                                    name="planform">

                </form>

您可以使用以下 javascript/jquery 代码从引导模式提交帖子表单:调用以下函数 onclick of input submit button

    function form_submit() {
        document.getElementById("paymentitrform").submit();
   }  
于 2018-05-08T06:38:11.957 回答
3

您可以在表单中包含模式。在 Bootstrap 文档中,它建议将模式作为“顶级”元素,但它仍然可以在表单中使用。

您创建一个表单,然后模态“保存”按钮将成为 type="submit" 的按钮,用于从模态中提交表单。

<form asp-action="AddUsersToRole" method="POST" class="mb-3">

    @await Html.PartialAsync("~/Views/Users/_SelectList.cshtml", Model.Users)

    <div class="modal fade" id="role-select-modal" tabindex="-1" role="dialog" aria-labelledby="role-select-modal" aria-hidden="true">
        <div class="modal-dialog" role="document">
            <div class="modal-content">
                <div class="modal-header">
                    <h5 class="modal-title" id="exampleModalLabel">Select a Role</h5>
                </div>
                <div class="modal-body">
                    ...
                </div>
                <div class="modal-footer">
                    <button type="submit" class="btn btn-primary">Add Users to Role</button>
                    <button type="button" class="btn btn-secondary" data-dismiss="modal">Cancel</button>
                </div>
            </div>
        </div>
    </div>

</form>

您可以将表单数据发布(或获取)到任何 URL。默认情况下,它是服务页面 URL,但您可以通过设置 form 来更改它action。您不必使用 ajax。

关于表单操作的 Mozilla 文档

于 2019-08-09T14:25:47.090 回答