Twitter Bootstrap 2 modal form dialogs

后端 未结 5 1919
失恋的感觉
失恋的感觉 2021-01-30 12:01

I have the following dialog form :


      
      
5条回答
  • 2021-01-30 12:15

    FYI You can do the following (written in jade):

    .modal.hide.fadel
      form.modal-form
        .modal-header
            button.close type='button' data-dismiss="modal" x
            h3= t 'translation'
        .modal-body
            p hello
        .modal-footer
            button.btn data-dismiss="modal" href="#" = t 'close'
            a.btn.btn-primary data-dismiss="modal" data-remote="true" href="#"= t 'form.submit'
    
    0 讨论(0)
  • 2021-01-30 12:21

    The problem for submitting form lies within bootstrap own JS modal library (bootstrap-modal.js) - basicaly submit event is being prevented due to line #204: ev.preventDefault (why?).

    My solution was to add:

    if(!$(e.target).parents('form'))
       e.preventDefault();
    

    however I don't know what problems it will spawn.

    0 讨论(0)
  • 2021-01-30 12:23

    With HTML5 you can have something like this:

    <div class="modal" id="myModal">
      <div class="modal-header">
        <a class="close" data-dismiss="modal">×</a>
        <h3>Add Tags</h3>
      </div>
    
      <div class="modal-body">
        <form id="my_form" accept-charset="UTF-8" action="/tagging" data-remote="true" method="post">
            <div style="margin:0;padding:0;display:inline">
              <input name="utf8" type="hidden" value="&#x2713;" />
              <input name="authenticity_token" type="hidden" value="mCNvbvoPFWhD7SoJm9FPDh+BcRvCG3d16P+oOFACPuc=" />
            </div>
            <input id="tags_string" name="tags_string" type="text" value="luca" />
            <input id="id" name="id" type="hidden" value="4f1c95fd1d41c80ff200067f" />
        </form>
      </div>
    
      <div class="modal-footer">
        <div class="btn btn-primary"><input name="commit" type="submit" value="Add tag" form="my_form" /></div>
      </div>
    </div>
    

    This called in HTML5 form-associated element of-course if you need to support all browsers + old ones then you need to go with JavaScript, but you can use JavaScript as a fallback :)

    0 讨论(0)
  • 2021-01-30 12:29

    Your submit button is outside of the form tags.
    It won't know what form to submit.

    Use javascript to connect it to the form.

    <div class='modal-body'>
        <form id="modal-form" accept-charset="UTF-8" action="/tagging" data-remote="true" method="post">
            <input name="something" value="Some value" />
        </form>
      </div>
    
    <div class='modal-footer'>
        <a id="modal-form-submit" class='btn btn-primary' href="#">Submit</a>
    </div>
    
    <script>
      $('#modal-form-submit').on('click', function(e){
        // We don't want this to act as a link so cancel the link action
        e.preventDefault();
    
        // Find form and submit it
        $('#modal-form').submit();
      });
    </script>
    

    As for the <a class='close' data-dismiss='modal'>×</a> that is supposed to link to the homepage, why not just remove the data-dismiss='modal' and make it act like a normal link using a standard href='home.html'.

    Here is some additional code to point you in the right direction for using AJAX to submit the form:

    // Since we want both pressing 'Enter' and clicking the button to work
    // We'll subscribe to the submit event, which is triggered by both
    
    $('#modal-form').on('submit', function(){
    
      //Serialize the form and post it to the server
      $.post("/yourReceivingPage", $(this).serialize(), function(){
    
        // When this executes, we know the form was submitted
    
        // To give some time for the animation, 
        // let's add a delay of 200 ms before the redirect
        var delay = 200;
        setTimeout(function(){
          window.location.href = 'successUrl.html';
        }, delay);
    
        // Hide the modal
        $("#my-modal").modal('hide');
    
      });
    
      // Stop the normal form submission
      return false;
    });
    
    0 讨论(0)
  • 2021-01-30 12:29

    To get the submit button work put it inside the form.

    <div class="modal">
        <form id="modal-form" action="/tagging" data-remote="true" method="post">
            <div class="modal-header">
                <a class="close" data-dismiss="modal">×</a>
                <h3>A Modal Form</h3>
            </div>
            <div class="modal-body">
                <input name="something" value="Some value" />
            </div>
            <div class="modal-footer">
                <a href="#" class="btn" data-dismiss="modal">Cancel</a>
                <input type="submit" value="Save" class="btn btn-primary" />
            </div>
        </form>
    </div>
    

    However, this adds an unexpected margin at the bottom of the modal. Bootstrap 2.0.2 introduced the modal-form class to fix this or you can fix it yourself with a style definition like:

    .modal > form {
        margin-bottom: 0;
    }
    

    For linking to another page when closing the modal I go along with TheShellfishMeme

    As for the × that is supposed to link to the homepage, why not just remove the data-dismiss='modal' and make it act like a normal link using a standard href='home.html'.

    0 讨论(0)
提交回复
热议问题