Pregunta

Tengo el siguiente formulario de diálogo:

<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 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" /></div>
  </div>
</div>

y su js:

<script>
  //<![CDATA[
    $(function() {
      // wire up the buttons to dismiss the modal when shown
      $("#myModal").bind("show", function() {
        $("#myModal a.btn").click(function(e) {
          // do something based on which button was clicked
          // we just log the contents of the link element for demo purposes
          console.log("button pressed: "+$(this).html());
          // hide the dialog box
          $("#myModal").modal('hide');
        });
      });
      // remove the event listeners when the dialog is hidden
      $("#myModal").bind("hide", function() {
          // remove event listeners on the buttons
          $("#myModal a.btn").unbind();
      });
      // finally, wire up the actual modal functionality and show the dialog
      $("#myModal").modal({
        "backdrop" : "static",
        "keyboard" : true,
        "show" : true // this parameter ensures the modal is shown immediately
      });
    });
  //]]>
</script>

Cuando hago clic en x, que es <a class='close' data-dismiss='modal'>×</a>, El formulario cierre de dejarme en la página actual, mientras me gustaría ir a la hamepage.

También "Agregar etiqueta" Botton, que es <div class='btn btn-primary'><input name="commit" type="submit" value="Add tag" /></div> No hagas nada, mientras que Haga clic en JAUTT, ingrese en el teclado, haz el trabajo y me gustaría hacer clic en "Agregar etiqueta" hizo lo mismo.

No soy tan hábil en JS y Prog front-end, por lo que cualquier ayuda es bienvenida.

¿Fue útil?

Solución

Su botón de envío está fuera de las etiquetas de formulario.
No sabrá qué formulario enviar.

Use JavaScript para conectarlo al formulario.

<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>

En cuanto a <a class='close' data-dismiss='modal'>×</a> Se supone que eso debe vincularse a la página de inicio, ¿por qué no simplemente eliminar el data-dismiss='modal' y haz que actúe como un enlace normal usando un estándar href='home.html'.

Aquí hay algún código adicional para señalarlo en la dirección correcta para usar AJAX para enviar el formulario:

// 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;
});

Otros consejos

Para obtener el botón de enviar trabajo colóquelo dentro del formulario.

<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>

Sin embargo, esto agrega un margen inesperado en la parte inferior del modal. Bootstrap 2.0.2 introdujo el modal-form clase Para solucionar esto o puede solucionarlo usted mismo con una definición de estilo como:

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

Para Vinculación a otra página al cerrar el modal Voy con Theshellfishmeme

En cuanto a la × que se supone que debe vincularse a la página de inicio, ¿por qué no simplemente eliminar el Data-Dismiss = 'Modal' y hacer que actúe como un enlace normal usando un estándar href = 'home.html'?

Con HTML5 puedes tener algo como esto:

<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>

Esto llamado en html5 elemento asociado a forma de origen si necesita admitir todos los navegadores + viejos, entonces debe ir con JavaScript, pero puede usar JavaScript como Fallback :)

El problema para enviar el formulario se encuentra dentro de la biblioteca Modal JS de Bootstrap (Bootstrap -Modal.js): el evento de envío básico se está evitando debido a la línea #204: ev.preventDefault (¿por qué?).

Mi solución era agregar:

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

Sin embargo, no sé qué problemas generará.

FYI Puedes hacer lo siguiente (escrito en 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'
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top