您可以在 jquery 模态对话框中提交表单吗

Posted

技术标签:

【中文标题】您可以在 jquery 模态对话框中提交表单吗【英文标题】:can you submit a form within a jquery modal dialog 【发布时间】:2011-07-28 12:51:33 【问题描述】:

我在 jquery ui 模式对话框中有一个表单,当我单击提交按钮时没有任何反应。有没有办法在 jquery 模态对话框中提交表单而无需在 javascript 中编写按钮代码?

这是我的代码 sn-p;

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

如果我删除“modal: true”以使对话框非模态,它将提交。

【问题讨论】:

相关***.com/questions/4743751/… Haim,我看过这篇文章 - 情况略有不同,因为在提供的 URL 中,jquery 对话框只是确认提交操作,而我的表单是模式对话框的一部分。我也尝试过实现这一点,但没有成功(它也不会提交我的表单)。\ 【参考方案1】:

您可以在对话框中使用 $.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');   
         

    
);

只需给您的选择标签一个 id ...... 可以更轻松地提取值。也摆脱了输入按钮,因为现在您将拥有对话框中的保存按钮。

【讨论】:

您好 Ziad,感谢您的回复。这让我更接近了。服务器返回一个我应该被重定向到的页面。关于如何从对话框中重定向到此的任何想法? @Jamie:在成功函数中使用window.location=&lt;YOUR_NEW_LOCATION 卡米亚你是对的,詹姆;替换“警报(数据);”使用 Kamyar 建议的代码。【参考方案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>

【讨论】:

我通过添加以下内容尝试了您的建议; $( "#opener" ).click(function() $( "#dialog" ).dialog( "open" ); $("#dialog").parent().appendTo($("form:first")); return false; ); 不走运 - 屏幕变灰,但对话从未出现。 尝试在表单中添加 id 属性:&lt;form id="myform"&gt; 并将$("#dialog").parent().appendTo($("form:first")); 移动到$("#opener").click... 之前 嗨 Kamyar,我尝试了您的代码建议。对话框加载,但是当我单击“创建”按钮时仍然没有任何反应。

以上是关于您可以在 jquery 模态对话框中提交表单吗的主要内容,如果未能解决你的问题,请参考以下文章

带有 Jquery 模态形式的 asp.net MVC

JQuery 模态框和 iframe

带有子表单的Vue模态对话框,提交数据

通过调用 ASP.NET 按钮单击从 jQuery 模态对话框回发

使用jQuery ui创建模态表单

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