使用dialog()和replaceWith()的jQuery UI对话框

时间:2011-09-15 18:18:40

标签: forms jquery-ui dom jquery

我想使用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()插入的父节点中消除。

如何成功预填表格?

2 个答案:

答案 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();