我正在编写自己的模块,使用一个虚拟的基础。我已经完成了大部分任务,但是我需要通过一些额外的设置。因此,我添加了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数据中。
如果你有更好的解决方案,请贡献!