表单元素在Opencart模块中不被post


Form elements are not being POSTed in Opencart module

我正在编写自己的模块,使用一个虚拟的基础。我已经完成了大部分任务,但是我需要通过一些额外的设置。因此,我添加了2个新的'input'元素,如你所见:

<form action="<?php echo $action; ?>" method="post" enctype="multipart/form-data" id="form">
    <div id="hidset" title="Configure module" style="display:none;">
        <table>
            <tr><td>Apikey:</td><td><input type="text" name="my_module_apikey" value="5"/></td><tr/>
            <tr><td>User ID:</td><td><input type="text" name="my_module_uid" value="6"/></td><tr/> 
        </table>
    </div>

然后我想让这个div在一个对话框中打开。所以我写了这个函数:

function dialogSettings() {
 $( "#hidset" ).dialog({
    height: 250,
    width: 250,
    modal: true,
    buttons: { 'OK': function() {
                      $(this).dialog('close');
                }
             }
    });  }

在此之前一切正常

现在,如果我选择打开对话框-无论我是否改变设置或什么都不做-单击其按钮关闭它并选择保存模块,这些额外的2设置不会被发布。如果我选择再次编辑模块,这次不打开对话框,瞧!使用硬编码的值发送设置很好。

你知道是什么导致了这个问题吗?

好了,我找到问题了。这是因为.dialog以一种方式重新排列DOM树,这2个元素被认为是表单的一部分,所以它们没有被post。一个可能的解决方案(也许是一个hack?)是在表单内部的隐藏输入中传递对话框字段值,因此它们将始终包含在POST数据中。

如果你有更好的解决方案,请贡献!