2011-04-03 19 views
8

Tengo un formulario dentro de un cuadro de diálogo modal de jquery ui, cuando hago clic en el botón de enviar no pasa nada. ¿Hay alguna manera de enviar un formulario dentro de un diálogo modal de jquery sin tener que codificar botones dentro de javascript?puede enviar un formulario dentro de un diálogo modal de jquery

Aquí está mi fragmento de código;

<script> 
    // increase the default animation speed to exaggerate the effect 

    $(function() { 
     $("#dialog").dialog({ 
      autoOpen: false, 
      draggable: false, 
      resizable: false, 
        modal: true, 

     }); 

     $("#opener").click(function() { 
      $("#dialog").dialog("open"); 
      return false; 
     }); 
    }); 

    function SetValues() 
    { 
     var s = 'X=' + window.event.clientX + ' Y=' + window.event.clientY ; 
     document.getElementById('divCoord').innerText = s; 

    } 
    </script> 

<div id="dialog" title="new task"> 
     <form method="post" action="/projects/{{ project.slug }}/"> 
      <div class="form-row"> 
       <label class="required" for="title">task type</label> 
       <select name="type"> 
       {% for TaskType in project.tasktype_set.all %} 
        <option value="{{ TaskType.name }}">{{ TaskType.name }}</option> 
       {% endfor %} 
       </select> 
      </div> 
      <div id="buttons"> 
       <input type="submit" value="create"/> 
      </div> 
     </form> 
</div> 

<button id="opener">new task</button> 

si elimino "modal: true," para que el diálogo no sea modal, se enviará.

+0

relacionados http://stackoverflow.com/questions/4743751/jquery-modal-dialog-box-isnt-submitting-my-form –

+0

Haim, tengo visto esta publicación - situación ligeramente diferente porque en la URL proporcionada el diálogo de jquery simplemente confirma la acción de envío, mientras que mi formulario es parte del diálogo modal. También he intentado implementar esto, pero no tuve éxito (tampoco envió mi formulario). \ – Jamie

Respuesta

6

podría utilizar el $ .post() o $ .ajax() desde dentro de su ejemplo de diálogo:

$("#dialog").dialog({ 
    autoOpen: false, 
    draggable: false, 
    resizable: false, 
    modal: true, 
    buttons: { 
     "Save": function() { 
      var type = $("#type option:selected").val(); 
      $.post("/projects/{{project.slug}}/", {type:type}, function(data) { 
       alert(data);// ---> data is what you return from the server 
      }, 'html'); 
     }, 
     "Close": function(){ 
      $(this).dialog('close'); 
     } 

    } 
}); 

acaba de dar su selecto etiqueta de un id a ...... hace que sea más fácil jala el valor también deshacerte del botón de entrada, ya que ahora tendrás el botón guardar del diálogo.

+1

Hola Ziad, gracias por tu respuesta. Esto me ha acercado mucho más. El servidor devuelve una página a la que debería ser redirigido. ¿Alguna idea sobre cómo puedo redirigir a esto desde el diálogo? – Jamie

+1

@Jamie: Use 'window.location = Kamyar

+0

Kamyar tienes razón, Jaime; reemplace la "alerta (datos);" con el código sugerido de Kamyar. –

2

Tiene que volver a mover el cuadro de diálogo a su formulario. Haga esto después de crear el diálogo. como:

$("#dialog").parent().appendTo($("form:first")); 

ACTUALIZACIÓN: ¿Por qué su formulario incluido en ti de diálogo? ¿Tienes dos formas? Intenta mover el formulario para que sea el contenedor. A continuación se muestra el código completo que creo que debería funcionar:

<script> 
// increase the default animation speed to exaggerate the effect 

$(function() { 
    $("#dialog").dialog({ 
     autoOpen: false, 
     draggable: false, 
     resizable: false, 
       modal: true, 

    }); 

    $("#dialog").parent().appendTo($("form:first")); 

    $("#opener").click(function() { 
     $("#dialog").dialog("open"); 
     return false; 
    }); 
}); 

function SetValues() 
{ 
    var s = 'X=' + window.event.clientX + ' Y=' + window.event.clientY ; 
    document.getElementById('divCoord').innerText = s; 

} 
</script> 

<form id="form1" method="post" action="/projects/{{ project.slug }}/"> 
    <div id="dialog" title="new task"> 
     <div class="form-row"> 
      <label class="required" for="title">task type</label> 
      <select name="type"> 
      {% for TaskType in project.tasktype_set.all %} 
       <option value="{{ TaskType.name }}">{{ TaskType.name }}</option> 
      {% endfor %} 
      </select> 
     </div> 
     <div id="buttons"> 
      <input type="submit" value="create"/> 
     </div> 
    </div> 
</form> 

<button id="opener">new task</button> 
+0

Intenté su sugerencia agregando lo siguiente; '$ (" #opener ") .click (función() {' '$ (" #dialog ") .dialog (" abrir ");' '$ (" # diálogo "). Parent(). AppendTo ($ ("form: first")); ' ' return false; ' '}); ' sin suerte: la pantalla se pone gris, pero el diálogo nunca aparece. – Jamie

+0

Intenta agregar un atributo id a tu formulario: '

' y mueve '$ (" # diálogo "). Parent(). AppendTo ($ (" form: first "));' before '$ (" # abridor "). haga clic en ...' – Kamyar

+0

Hola, Kamyar, probé la sugerencia de tu código. El diálogo se carga, pero cuando hago clic en el botón "Crear" todavía no sucede nada. – Jamie

Cuestiones relacionadas