我想使用jQuery UI对话框打开一个表单对话框,在该对话框中可以编辑有关员工的信息 表格看起来像这样
<form id="formAddNewRow" action="/frontend_dev.php/test/create" method="post" >
<table>
<tbody>
<ul>
<li>
<label for="employee_firstname">Firstname</label>
<input type="text" name="employee[firstname]" id="employee_firstname" />
</li>
<li>
<label for="employee_lastname">Lastname</label>
<input type="text" name="employee[lastname]" id="employee_lastname" />
</li>
<ul>
</tbody>
</table>
</form>
我想加载预填充员工数据的表单元素。例如
<label for="employee_lastname">Lastname</label> <input type="text" name="employee[lastname]" value="Miller" id="employee_lastname" />
所以我的想法是ajax一个适合所选员工的完整表格,并将其替换为上面的那个。
<form id="formAddNewRow" action="/frontend_dev.php/test/create" method="post" >
<table>
<tbody>
<ul>
<li>
<label for="employee_firstname">Firstname</label>
<input type="text" name="employee[firstname]" value="Miller" id="employee_firstname" />
</li>
<li>
<label for="employee_lastname">Lastname</label>
<input type="text" name="employee[lastname]" value="Tom" id="employee_lastname" />
</li>
<ul>
</tbody>
</table>
</form>
我尝试通过
来做到这一点$( ".editButton" )
.button()
.click(function() {
var replace = $.ajax({
url: 'employee/edit?id=1', success: function() {
$( "#formAddNewRow" ).replaceWith(replace.responseText);
}
});
});
这样可行,但当我这样做时它会停止工作:
$( "#formAddNewRow" ).dialog({});
没有错误消息或警告。表单刚刚从DOM以及由dialog()插入的父节点中消除。
如何成功预填表格?
答案 0 :(得分:1)
将<form>
放入<div>
并将.dialog()
附加到div
,而不是form
。
在AJAX调用中,像现在一样替换form
,将其父div
保留在对话框中。
这是必要的,因为jQuery UI在内部维护对对话框中包含的元素的引用,如果替换该元素,则这些引用不会更新。替换该元素的子将消除该问题。
答案 1 :(得分:1)
<div id="formAddNewRowDialog">
<form id="formAddNewRow" action="/frontend_dev.php/test/create" method="post" >
<table>
<tbody>
<ul>
<li>
<label for="employee_firstname">Firstname</label>
<input type="text" name="employee[firstname]" value="Miller" id="employee_firstname" />
</li>
<li>
<label for="employee_lastname">Lastname</label>
<input type="text" name="employee[lastname]" value="Tom" id="employee_lastname" />
</li>
<ul>
</tbody>
</table>
</form>
</div>
将表格包裹在上面的div中,然后调用
$( "#formAddNewRowDialog" ).dialog();