jQuery-UI对话框缺少POST数组中的<button>名称/值</b​​utton>

时间:2011-10-19 04:16:32

标签: jquery jquery-ui jquery-ui-dialog

我有一个jQuery对话框,在单击“请确认”按钮时发布表单。

我看到了我的帖子数据,但按钮缺少其名称/值: enter image description here

如何让它显示按钮名称/值?
期望结果的示例 enter image description here

以下是演示此行为的示例代码testjQueryDialog.php:

<html><head>
<link rel="stylesheet" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.16/themes/base/jquery-ui.css" type="text/css" />
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js"></script>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.16/jquery-ui.min.js"></script>
<script type="text/javascript">
$(document).ready(function() {
    var $dialog = $('<div></div>')
        .dialog({
            autoOpen: false,
            title: 'Are you sure?',
            modal: true,
            closeOnEscape: true,
            buttons: {
                "Please confirm": function() {
                $( this ).dialog( "close" );
                $('#btnSubscription').parents('form').submit();
                },
                Cancel: function() {
                $( this ).dialog( "close" );
                }
            }
        });
    $('#btnSubscription').live('click', function() {
        $dialog.dialog('open');
        return false;
    });
});
</script>
</head><body>
<form action="/testjQueryDialog.php" method="post">
<div>
    <input name="txtOne" type="text" value="One">
  <input name="txtTwo" type="text" value="Two">
  <button name="btnSubmit" id="btnSubscription" value="Subscription">Click</button>
</div>
<?php echo 'POST<br>'; print_r($_POST); ?>
</form></body></html>

2 个答案:

答案 0 :(得分:1)

HTML4 spec表示:“如果表单包含多个提交按钮,则只有激活的提交按钮成功。”

看起来浏览器会忽略事实表单只有一个提交按钮,并且由于您通过$('#btnSubscription').parents('form').submit()动态触发表单提交,因此按钮不被视为成功控件。

问题在于按钮click回调:

$('#btnSubscription').live('click', function() {
    $dialog.dialog('open');
    return false;
});

从回调中返回false时,按钮激活会丢失,您需要根据用户的选择返回值:Returning value from confirmation dialog using JQuery UI dialog

答案 1 :(得分:1)

似乎jQueryUI对话框略有破坏,因为它不返回按钮名称/值对。

我的解决方法是在表单中添加一个隐藏字段,并使用它来传递按钮值。

$('#btnSubscription').live('click', function() {
    document.getElementById('hidSubmit').value = document.getElementById('btnSubscription').value
    $dialog.dialog('open');
    return false;
});

现在我想要的结果如下: 数组([txtOne] =&gt;一个[txtTwo] =&gt;两个[hidSubmit] =&gt;订阅)