2011-04-03 17 views
8

के भीतर एक फॉर्म सबमिट कर सकते हैं मेरे पास एक jquery ui मोडल डायलॉग के अंदर एक फॉर्म है, जब मैं सबमिट बटन पर क्लिक करता हूं तो कुछ भी नहीं होता है। जावास्क्रिप्ट के भीतर कोड बटन के बिना jquery मोडल संवाद में कोई फ़ॉर्म सबमिट करने का कोई तरीका है?क्या आप एक jquery मोडल डायलॉग

यहां मेरा कोड स्निपेट है;

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

यदि मैं संवाद को गैर-मोडल बनाने के लिए "मोडल: सत्य" हटा देता हूं, तो यह सबमिट होगा।

+0

संबंधित http://stackoverflow.com/questions/4743751/jquery-modal-dialog-box-isnt-submitting-my-form –

+0

हैम, मेरे पास है: नीचे पूर्ण कोड मुझे लगता है कि काम करना चाहिए है इस पोस्ट को देखा - थोड़ा अलग स्थिति क्योंकि यूआरएल में प्रदान किया गया है jquery संवाद बस सबमिट कार्रवाई की पुष्टि कर रहा है, जबकि मेरा फॉर्म मोडल संवाद का हिस्सा है। मैंने इसे कार्यान्वित करने का भी प्रयास किया है, लेकिन इसमें कोई सफलता नहीं थी (यह मेरा फॉर्म भी सबमिट नहीं करेगा)। \ – Jamie

उत्तर

6

आप $ .post() या $ .ajax() से अपने संवाद जैसे भीतर इस्तेमाल कर सकते हैं:

$("#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'); 
     } 

    } 
}); 

सिर्फ करने के लिए ...... यह करने के लिए आसान बना देता है अपने चुनिंदा टैग एक आईडी देना मूल्य खींचो। इनपुट बटन से छुटकारा पाएं, क्योंकि अब आप संवाद से बटन बचाएंगे।

+1

हाय ज़ियाद, आपकी प्रतिक्रिया के लिए धन्यवाद। यह मुझे बहुत करीब मिला है। सर्वर एक पृष्ठ देता है जिसे मुझे रीडायरेक्ट किया जाना चाहिए। संवाद के भीतर से मैं इसे कैसे रीडायरेक्ट कर सकता हूं इस पर कोई विचार? – Jamie

+1

@ जैमी: सफलता समारोह में 'window.location = Kamyar

+0

कामयार आप सही हैं, जैम; "अलर्ट (डेटा);" को प्रतिस्थापित करें कामयार के सुझाए गए कोड के साथ। –

2

आपको संवाद को अपने रूप में वापस ले जाना होगा। संवाद बनाने के बाद ऐसा करें। जैसे:

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

अद्यतन: क्यों अपने प्रपत्र आप में शामिल है संवाद? क्या आपके पास दो रूप हैं? फॉर्म को कंटेनर के रूप में स्थानांतरित करने का प्रयास करें।

<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

मैंने निम्नलिखित जोड़कर आपके सुझाव की कोशिश की; '$ (" #opener ") .click (function() {' '$ (" #dialog ")। डीअलॉग (" खुला ");' '$ (" # संवाद ")। अभिभावक()। संलग्न करें ($ ("फॉर्म: पहला")); ' ' झूठी वापसी; ' '}); ' कोई भाग्य नहीं - स्क्रीन ग्रे हो जाती है, लेकिन संवाद कभी प्रकट नहीं होता है। – Jamie

+0

अपने फॉर्म में एक आईडी विशेषता जोड़ने का प्रयास करें: '

' और '$ ("# dialog") को ले जाएं। अभिभावक()। AppendTo ($ ("form: first"));' पहले '$ (" # ओपनर ")। क्लिक करें ...' – Kamyar

+0

हाय कामयार, मैंने आपके कोड सुझाव की कोशिश की। संवाद लोड होता है, लेकिन जब मैं 'बनाएं' बटन पर क्लिक करता हूं तब भी कुछ भी नहीं होता है। – Jamie

संबंधित मुद्दे