2011-10-08 43 views
0

我正在使用ajax调用来渲染一个部分。问题是,当调用完成时,我的jquery代码仅适用于新插入的HTML ,如果我使用live()方法(据我所知)。是否有一个检测仅存在的JQuery事件?

我已经成功地将live()方法用于那些具有“点击”事件的选择器。例如:

$('.course_name_click').live('click', function(e) { 
    $(this).closest('div').next().slideToggle('slow'); 
    e.preventDefault(); 
}); 

但我不知道如何使用live()作为简单的hide()函数。也就是说,我想要一个HTML片段在第一次出现时被隐藏。我认为load()可能工作,但它不。有什么建议么?

$('.descrip_body').live('load', function(e) { 
    $('.descrip_body').hide(); 
}); 

只是要清楚,我想改造

$('descrip_body').hide(); 

到使用现场版本()。


作为对答案的回应,试图将一个hide()回调附加到AJAX请求。但它仍然不起作用(即相关的HTMl没有隐藏)。下面是代码:

$("#courses_body").html("<%= escape_javascript(render :partial => 'courses') %>", function() { 
    $('.descrip_body').hide(); 
}); 

回答

3

两个问题:

1 - 你能不能用,有一个display:none风格已经是一个类加载HTML?

2-你不能把你的$('.descrip_body').hide();代码放在你的成功回调函数上吗?

我知道这是不是正是你问什么,但他们可能工作,以及...

+0

啊,第一个是一个简单的修复!谢谢!至于第二,我试了一下,但没有奏效。如果您有任何见解,我会用新代码更新我的问题。 – jyli7

0

如何HTML片段被加载在首位?为什么不在AJAX调用返回时隐藏它?

1

看起来你实际上没有AJAX请求 - 一个AJAX请求会打到一个特定的URL,从URL返回标记,并触发一个“成功”方法作为回调。 jQuery使用$ .ajax,$ .post和$ .get来执行此操作。

$ .html更直接 - 它立即向DOM注入一串标记。这就是你正在使用的,因为Rails的部分是直接把这个字符串放到你的$ .html()参数中。

因此,从我收集的信息来看,您实际上不需要回调或任何类型的事件,因为您所做的不是异步的......您无需等待您的标记出现在页面上;你可以注入它并开始对它进行操作。尝试:

$("#courses_body") 
    .html("<%= escape_javascript(render :partial => 'courses') %>") 
    .find(".descrip_body") 
    .hide(); 
+0

啊,那有效!而且非常明确的解释。谢谢! – jyli7