【发布时间】: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