在表单提交上显示 Twitter Bootstrap 模式

Posted

技术标签:

【中文标题】在表单提交上显示 Twitter Bootstrap 模式【英文标题】:Show Twitter Bootstrap modal on form submit 【发布时间】:2014-01-19 07:28:19 【问题描述】:

我正在尝试在提交表单时显示模态,例如:

表单有两个文本字段,如果其中一个已填写,则模式将向用户显示一些信息,如果两个字段均未填写,则表单将不会提交 为此,我这样做了,但没有成功..

jsfiddle:jsFidle Link

<div id="modal-3" class="modal fade" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
    <div class="modal-content">
    <div class="modal-header">
        <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>

        <h3 id="myModalLabel">Modal header</h3>
    </div>

    <div class="modal-body">
        <p>do you want to save partial info</p>
    </div>

    <div class="modal-footer">
        <button class="btn" data-dismiss="modal" aria-hidden="true" id="finishNow">Finish Now</button>
        <button class="btn btn-primary" data-dismiss="modal" id="doItLater">Do It Later</button>
    </div>
    </div>
</div>


    <a href="#modal-3" role="button" class="btn" data-toggle="modal" id="confirmButton">Confirm</a>



<form name="asd" action="asdd" name="formName" id="refrenceSubmit" >
<input type="text" name="name11" id="nameField" value=""/>
<input type="text" name="name22"id="phoneField" value=""/>
<input type="submit" name="name33"value="Submit" />
</form>

js:

$(function()
            $("#refrenceSubmit").submit(function()

                var inputFieldsCount=0;
                $(this).find('input[type=text]').each(function()
                    if($(this).val() != "") inputFieldsCount+=1;
                );

                if(!inputFieldsCount)
                    alert("You must fill in at least one field");
                    return false;
                else if(inputFieldsCount<2)
                       $('#confirmButton').click()
                       $('#showModelContainer').show()
                       $('#doItLater').click("click",function (e) 
                       $('#refrenceSubmit').submit()
                        
                     );
                     return false;
                
            );
        );

编辑的 JAVASCRIPT

$(function()
            $("#submitAndContinue").click(function(evt)

                var inputFieldsCount=0;
                $('.refrenceSubmit').find('input[type=text]').each(function()
                    if($(this).val() != "") inputFieldsCount+=1;
                );

                if(!inputFieldsCount)
                    alert("You must fill in at least one field");
                    evt.preventDefault();
                else if(inputFieldsCount<5)

                   $('#modal-3').modal('show');
                   evt.preventDefault();
                
                else 
                    $('#modal-3').modal('hide'); //in-case is showing
                
            );

            $('#doItLater').on("click",function (e) 
              $('#saveAndContinue').val('saveAndContinue');
              $('.refrenceSubmit').submit();
            );
        );

【问题讨论】:

请注意,正确的术语是modal,而不是model。在标题中使用“模态”可能会在未来的问题中得到更好的回答,因为模型通常意味着完全不同的东西。我在这个问题上为你改变了。 【参考方案1】:

您在 jsfiddle 中的原始 html 代码隐藏了模态框的封闭容器。此外,javascript 中存在语法错误。这是一个新的 jsfiddle,它修复了这些问题,还展示了如何触发模态,然后在单击模态中的按钮时手动提交。

http://jsfiddle.net/kc8zb/9/

代码:

$(function()
            $("#refrenceSubmit").submit(function(evt)

                var inputFieldsCount=0;
                $(this).find('input[type=text]').each(function()
                    if($(this).val() != "") inputFieldsCount+=1;
                );

                if(!inputFieldsCount)
                    alert("You must fill in at least one field");
                    evt.preventDefault();
                else if(($('#nameField').val()=="")&&
                         ($('#phoneField').val()!=""))

                   $('#modal-3').modal('show');
                   evt.preventDefault();
                
                else 
                    $('#modal-3').modal('hide'); //in-case is showing
                


            );

            $('#doItLater').click("click",function (e) 
              $('#nameField').val("not clear what you intended, but this sets value in name field");
              $('#refrenceSubmit').submit();
            );

        );

目前尚不清楚您要做什么,但这应该可以为您提供一个起点。如果你想钩入模态,你可以绑定到模态按钮上的点击事件,或者你可以关注modal close event。

另外,请注意,不推荐使用返回 false 来取消提交事件。而是使用preventDefault。

【讨论】:

点击模型按钮(稍后再做)表单没有提交。我只需要如果任何字段为空,然后询问用户他是否想现在填写条目(现在完成)或稍后(稍后再做)..请看我编辑的问题,即我试图在 else if(inputFieldsCount 根据您的建议,我实现了我想要的。非常感谢您。【参考方案2】:

我只是稍微修改了你的代码

代码将在提交时打开模式...检查一下

$(function()
     $('form').on('submit', function ()                    
          $('#modal-3').modal('show');
          return false;
     );
 );

这里是修复:我稍微改变了你的对象:)

(function () 
    var confirmSubmitManager = 
        init: function () 
            this.submitButton = null;
            this.confirmButton = null;
            this.modalContainerView = null;
            this.isFormPrestine = false;
            this.form = null;
            this.inputs = [];

            this.cache();
            this.bindEvents();
            return this;
        ,
        cache: function() 
            this.submitButton = $("input[type=submit]");
            this.confirmButton = $("#doItLater");
            this.modalContainerView = $("#modal-3");
            this.inputs = $("#refrenceSubmit > input[type=text]");
            this.form = $("#refrenceSubmit");
        ,
        bindEvents: function ()  // attach event handlers

            this.submitButton.on('click', this.validateSubmit);
            this.confirmButton.on('click', this.confirm);
        ,
        validateSubmit : function() 
            var self = confirmSubmitManager;
            var dirtyInputs = 0;

            for (var input in self.inputs) 

                if ($(self.inputs[input]).val() == "") 
                    dirtyInputs++;
                
            

            if (dirtyInputs > 0) 
                alert("You must fill in at least one field");
                self.isFormPrestine =  false;

             else 
                 self.isFormPrestine =  true;
                                  
            // incase the inputs are pristeen
            self.modalContainerView.modal('show');
            return false;
        ,
        confirm: function () 
            var self = confirmSubmitManager;
            if(self.isFormPrestine)
               self.form.submit();
        
    ;
    window.load = confirmSubmitManager.init();
)(jQuery);

【讨论】:

1)实际上,当我提交表单时,它会检查是否有任何字段为空并显示相关消息。(工作)..2)当我提交表单时我的代码显示模型,唯一的问题是它提交自动表单我没有机会点击模型的按钮,以便我可以提交表单。

以上是关于在表单提交上显示 Twitter Bootstrap 模式的主要内容,如果未能解决你的问题,请参考以下文章

JQuery submit() 函数未从 Twiiter-Bootstrap 3 模态中触发的按钮提交 HTML 表单

表单提交后如何在输入字段上显示表单提交值

使用响应式 Twitter Bootstrap 内容重叠水平表单的问题

在同一页面上显示提交的表单响应。 (没有重装)

在提交表单上显示模式

如何在本页提交表单把提交的值显示在本页面上? 请高手把详细的讲解过程给我说一下。谢谢!