【问题标题】:Issue with Ajax on Jquery DialogJquery 对话框上的 Ajax 问题
【发布时间】:2013-11-21 14:20:55
【问题描述】:

我有一个 Jquery.Dialog,用于在我的应用程序中发送消息。当用户单击“新建”时,会弹出对话框并允许用户选择他们想向谁发送消息(目前,它使用 ID 而不是用户名)。

当我第一次打开对话框时,一切正常。我可以通过键入 ID 或在第二个对话框中打开的“搜索表单”上查看来选择收件人。在页面刷新之前第一次打开时,所有这些都可以正常工作。 ID 字段在“onchange”事件上具有 Ajax 函数,该函数验证用户 ID 是否存在于我的数据库中并启用“发送”按钮(默认禁用以防止用户发送“收件人 ID”为 null 的消息。

问题是,如果我关闭消息对话框并重新打开它(不刷新页面),Ajax 功能(上面提到的)不再起作用。为了让它再次工作,我必须刷新页面。

“检查元素”没有显示任何 javascript 错误,所以我真的不知道是什么原因造成的。我在使用以下行打开之前清除对话框:

$(document.getElementById("msgdialog").innerHTML= " ");

但什么都没有。下面我将发布一些代码,让您了解我在做什么:

对话框

$(document.getElementById("msgdialog").innerHTML= " ");
$("<%= escape_javascript(render "newmessages") %>").appendTo("#msgdialog");
$( "#msgdialog" ).dialog(
   {
 hide: 'fold',
 show: 'blind',
 modal: true,
 resizable: false,
 padding: 0,
 margin: 0,
 height: 'auto',
 width: 'auto',
 title: 'Message',
     stack: true
    }
  );

在对话框中,有一个 form_for,其字段为(ID、名称、主题和消息)和一个“发送”按钮,默认情况下该按钮是禁用的,由 ajax 请求启用。

这是表单 ID 字段的“onChange”事件上发生的 ajax 请求:

<script>
function selectModel(pmodel,elObj) 
  { 
   var dataString = 'model='+pmodel+'&class='+document.getElementById('selected').value+'&code='+elObj.value+'&userid='+document.getElementById('idfield').value+'&type=displayname'+'&type2=message'; 
$.ajax(
  {   
     type: "GET",  
    url: "/searchlookup/show",  
    data: dataString  
  }); 
  return false;
};

这是在 Ajax 请求中调用的 show.js

<% when "searchname" %>
<%if @errormsg == "0" %>
    <% if params[:type2] == 'messages' %>
        $(document.getElementById('buttonc').disabled = false)              
    <% end %>
<% else %>
    <% if params[:type2] == 'messages' %>
        $(document.getElementById('buttonc').disabled = true);
    <% end %>

基本上就是这些了。如果您还需要什么,请告诉我:)

奥斯卡

编辑

我最近想到的东西。我的索引上有 3 个选项卡,一个显示“未读消息”,另一个显示“已读消息”,第三个显示“已发送消息”。每个选项卡都列出了属于每个类别的消息,当我单击列出的行之一时,它会打开一个显示内容的对话框。我意识到,如果在打开和关闭“新消息”对话框后,如果我打开“未读/已读/已发送”消息下列出的消息之一并关闭该对话框,如果我再次尝试打开“新消息”,它工作正常。而且我可以根据需要多次关闭/打开它,并且效果很好......:S

【问题讨论】:

  • 只是一个建议...可能值得切换到 jquery 来操作 DOM 与使用 document.getElementbyid 等。

标签: javascript jquery ruby-on-rails ruby ajax


【解决方案1】:

这成功了。关闭后销毁对话框

$(this).dialog("destroy");

这在对话框的“关闭”事件中调用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-04
    • 1970-01-01
    相关资源
    最近更新 更多