function hideClose(){
var unreplied_hide_close_btn = jQuery('.commentbox-gray:not(.private-note)').length;
var close_button = jQuery("a[data-status-name='Closed'][data-cnt-id='cnt-note']");
if(unreplied_hide_close_btn > 0)
{
jQuery('#close_ticket_btn').show();
close_button.show();
if(jQuery("#helpdesk_ticket_status > option[value='5']").length <= 0)
{
jQuery("#helpdesk_ticket_status").append('<option value="5">Closed</option>');
}
}
else
{
jQuery("#helpdesk_ticket_status > option[value='5']").remove().end();
jQuery('#close_ticket_btn').hide();
var button_text = jQuery("[data-public-text='Add Public Note'] span").text();
if(( button_text == "Add Private Note"))
{
close_button.hide();
}
else
{
close_button.show();
}
}
}
这是一个函数,如果有一个元素带有类"注释",则切换关闭按钮框",这不是"私人笔记"。
当 DOM 准备就绪时,我正在调用此函数。
jQuery(document).ready(function(){
setInterval(function(){
hideClose();
},500);
jQuery('.commentbox').livequery(function(){
hideClose();
});
});
有一些 ajax 调用会在添加注释时修改 DOM。注释上还有一个删除选项,该选项是通过 AJAX 执行的。调用 setInterval 中的函数将每半秒检查一次,因为可以随时添加。当执行 AJAX 以添加注释时,将调用该函数。但是,删除注释时不会调用该函数。删除元素后,变量"unreplied_hide_close_btn"不会更新。据我观察,删除注释的 AJAX 调用是中止 setInterval。甚至实时查询功能也不起作用。我还尝试了实时、打开、绑定函数。我想知道是否有办法检查所有 DOM 更改,以便可以替代 setInterval。如果除了setInterval之外没有其他方法,请帮助我解决为什么删除注释后没有调用函数hideClose。
下面是删除注释的 AJAX 调用。
<a class="red_links conv-action-icon conv-actions-delete tooltip" href="#" onclick="if (confirm('Remove this from the ticket conversation?')) { new Ajax.Request('/helpdesk/tickets/4/notes/1000313643', {asynchronous:true, evalScripts:true, method:'delete'}); }; return false;" data-original-title="Delete" twipsy-content-set="true">Delete</a>
您应该向 AJAX 删除请求添加一个成功的回调函数。当请求返回成功时,它被调用并触发一个函数,将其从 DOM 中删除。
另外,我认为除了设置检查消息的间隔之外,您可能还需要考虑其他选项。理想情况下,您只在需要时运行函数,而不仅仅是检查是否存在某些内容。