2012-12-18 48 views
0

我正在尝试创建单个页面CRUD。 现在,我遇到了show函数的一些错误。对话框在页面刷新后显示为div

应用的例子可以在这里找到: http://tryoutcreation.herokuapp.com/

这似乎工作好吗。 创建后,如果页面未刷新,则show函数将正常工作。

但是,如果它被刷新,对话框将停止作为对话框工作,并只显示为div。

您可以通过创建用户并单击显示功能来尝试。然后尝试刷新页面,相同的div将仅显示在页面上而不是对话框中。

源可以在这里找到: https://github.com/frozzie/ModalCrud

相关代码:

的对话框显示形式。

<tr id = "<%= dom_id user%>"> 
<td><%= user.user_name %></td> 
<td><%= user.email %></td> 
<td><%= user.password %></td> 
<td><%= user.account_type %></td> 
<td><%= link_to 'Show', user, :remote=>true%></td> 
<td><%= link_to 'Edit', edit_user_path(user), :remote => true %></td> 
<td><%= link_to 'Destroy', user, :remote => true, method: :delete, data: { confirm: 'Are you sure?' } %> 
</td> 
<div id = "show-form" title="User Information"> 
    <p> 
    <b>User name:</b> 
    <%= user.user_name %> 
    </p> 

    <p> 
    <b>Email:</b> 
    <%= user.email %> 
    </p> 

    <p> 
    <b>Password:</b> 
    <%= user.password %> 
    </p> 

    <p> 
    <b>Account type:</b> 
    <%= user.account_type %> 
</p> 
</div> 
</tr> 

它应该只在点击显示按钮时打开。 $(“#show-form”)。dialog(“open”);

这是对话框。

$("#show-form").dialog({ 
     autoOpen: false, 
     height: 400, 
     width: 350, 
     modal: true, 
     closeOnEscape: true, 
     resizable:false, 
     buttons: { 
      Cancel: function() { 
       $(this).dialog("close"); 
      } 
     } 
    }) 

任何关于为什么发生的想法将不胜感激。

+0

好像你有多个元素'#show form' for – EricG

+0

当你创建页面时,你是否生成了带有内容的表单div,或者你是否填写了空的表单? – jaudette

+0

是的,我确实有#show-form的多个元素,那会是问题吗? –

回答

2

这对你的js比你的php少。

从代码中删除此:

 <div id = "show-form" title="User Information"> 
     <p> 
     <b>User name:</b> 
     <%= user.user_name %> 
     </p> 

     <p> 
     <b>Email:</b> 
     <%= user.email %> 
     </p> 

     <p> 
     <b>Password:</b> 
     <%= user.password %> 
     </p> 

     <p> 
     <b>Account type:</b> 
     <%= user.account_type %> 
     </p> 
     </div> 

再看看输出用户的信息正确。不要只在页面顶部输出。

 <tr id = "<%= dom_id user%>"> 
      <td><%= user.user_name %></td> 
      <td><%= user.email %></td> 
      <td><%= user.password %></td> 
      <td><%= user.account_type %></td> 
      <td class="click_me" data-id="<%= dom_id user%>"><%= link_to 'Show', user, :remote=>true%></td> 
      <td><%= link_to 'Edit', edit_user_path(user), :remote => true %></td> 
      <td><%= link_to 'Destroy', user, :remote => true, method: :delete, data: { confirm: 'Are you sure?' } %> 
      </td> 
     </tr> 
     <tr style="display: none;" class="hidden_<%= dom_id user%>"> 
     <td colspan="8"> 

     <div class = "show-form" title="User Information"> 
     <p> 
     <b>User name:</b> 
     <%= user.user_name %> 
     </p> 

     <p> 
     <b>Email:</b> 
     <%= user.email %> 
     </p> 

     <p> 
     <b>Password:</b> 
     <%= user.password %> 
     </p> 

     <p> 
     <b>Account type:</b> 
     <%= user.account_type %> 
     </p> 
     </div> 
</td> 
</tr> 

JS

现在,

$('td').on('click','.click_me', function(){ 
     var id = $(this).data('id'); 
     $('.hidden_'+id).slideToggle(); 
}); 

这是不完美的...笑以任何手段,但至少你可以用它希望的工作。

+0

我会试试这个。 –

+0

非常感谢您的回复。我得到了隐藏div的想法,但我尝试了另一种方法,但没有为每个用户设置div。 –

相关问题