【问题标题】:JQuery UI Dialog - Loading form from another page in a dialog and (upon submit) opening processing page in same dialogJQuery UI 对话框 - 从对话框中的另一个页面加载表单并(在提交时)在同一个对话框中打开处理页面
【发布时间】:2011-10-20 16:09:30
【问题描述】:

我有一个相当大的表单(changeuserjudge.php),我已经从一个单独的页面加载到一个对话框中,现在提交表单时,提交页面会在浏览器窗口中打开(而不是在打开的对话框中)。我试图弄清楚一旦按下提交按钮(并提交 POST 变量),我如何将处理表单(changeuserjudgeprocess.php)加载到同一个对话框中。我试图避免在同一页面上进行处理。

对话脚本:

<script type="text/javascript">
    $(document).ready(function(){
        $('#click').click(function(){
            $("#test").load('changeuserjudge.php?user=tim').dialog({modal:true}); 
            $( "#test" ).dialog( "option", "minWidth", 330 );
            $( "#test" ).dialog( "option", "position", 'top' );             
        });
    });
</script>

(测试只是空白页上的一个div)

提交表格:

<body>
    <div id="judgesMenu">
    <form action="changeuserjudgeprocess.php" method="POST">

    <?php

        $selectedJudges = array();
        if(isset($_GET['user'])){
            echo '<center><b>User: '.ucfirst($_GET['user']).'</b></center><br />';
        }
        echo '<center><input type="checkbox" id="checkall">Select All &nbsp;&nbsp;&nbsp;<input type="checkbox" id="checknone">Select None</center><br />';
        $listUserJudges = getUserJudges(userNametoID($_GET['user']));
        $arr = array();
        $num = count($listUserJudges);
        if ($num>1){
            foreach ($listUserJudges as $x){
                array_push($arr, judgeIDtoName($x));
            }
        }
        else {
            array_push($arr, $listUserJudges);
        }

        echo '<ul>';
        $list = getActiveJudges();
        foreach ($list as $x){
            $found = 0;
                if (count($arr)>1){
                    foreach ($arr as $y){
                        if ($x == $y){
                            $found = 1;
                            break;
                        }
                    }
                }
                else { 
                    if (judgeNametoID($x) == $arr[0]){
                        $found = 1;
                    }                       
                }
                if ($found==1){
                    echo '<li>';
                    array_push($selectedJudges, judgeNametoID($x));
                    echo '<input type="checkbox" checked="checked" name="checkbox[]" value="'.$x.'" />'.$x.'<br/>';
                    echo '</li>';   
                }
                else {
                    echo '<li>';
                    echo '<input type="checkbox" name="checkbox[]" value="'.$x.'" />'.$x.'<br/>';
                    echo '</li>'; 
                }
        }
            echo '</ul>';
            $_SESSION['selectedJudges']=$selectedJudges;
    ?>

    <input type="hidden" name="user" value="<?php echo userNametoID($_GET['user']); ?>" />

<br/>
    <p><center><input type="Submit" value="Save Changes" id="sub"/></center></p></div>
    </form></body>

【问题讨论】:

    标签: php jquery


    【解决方案1】:

    你看过jquery表单插件http://jquery.malsup.com/form/吗?这是一种非常简单的方法来劫持表单发布并通过 ajax 提交,而不是将其直接发布到表单 url,正如您所发现的(如果我理解正确的话)会丢失您的对话框。这是最少的代码。您对无效表单提交的反应是接下来要考虑的事情。让我知道我是否在正确的路线上,我会详细说明。

    <script type="text/javascript">
    $(function(){
        $("#judgeForm").ajaxForm({
            success: function(){
               // add some code in here to react to the success of your form post
            }
        });
    });
    </script>
    <body>
        <div id="judgesMenu">
        <form action="changeuserjudgeprocess.php" method="POST" id="judgeForm">
    
    </form>
    </div>
    

    【讨论】:

    • 谢谢!这个插件会派上用场。表单现在已正确提交,这很好,但是我无法阻止对话框退出,然后在浏览器窗口中加载 changeuserjudgeprocess.php。我尝试使用 return false;没有任何成功。有什么想法吗?
    • 您在表单处理脚本中没有重定向,是吗?您可以在设置插件的地方发布代码吗?
    猜你喜欢
    • 2011-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多