我正在使用ajax调用来渲染部分。问题是,当调用结束时,我的jquery代码仅适用于新插入的HTML 我使用live()方法(据我所知)。
我已经成功地将live()方法用于那些附加了“click”事件的选择器。例如:
$('.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();
到使用live()的版本。
在回答时,尝试将hide()回调附加到AJAX请求。但它仍然无效(即相关的HTM1未被隐藏)。这是代码:
$("#courses_body").html("<%= escape_javascript(render :partial => 'courses') %>", function() {
$('.descrip_body').hide();
});
答案 0 :(得分:3)
两个问题:
1-你不能用已经有display:none
风格的类加载你的html吗?
2-您是否可以将$('.descrip_body').hide();
代码放在成功回调函数上?
我知道这不完全是你所问的,但它们也可以起作用......
答案 1 :(得分:1)
看起来你实际上没有AJAX请求 - 一个AJAX请求会命中一个特定的URL,从URL返回标记,并触发一个“success”方法作为回调。 jQuery使用$ .ajax,$ .post和$ .get来执行此操作。
$ .html更直接 - 它会立即向DOM注入一串标记。这就是你正在使用的,因为Rails partial将该字符串直接放入你的$ .html()参数中。
所以,从我收集的内容来看,你实际上不应该需要回调或任何类型的事件,因为你所做的不是异步的......你不必等待让您的标记出现在页面上;你可以注入它并开始操作它。尝试:
$("#courses_body")
.html("<%= escape_javascript(render :partial => 'courses') %>")
.find(".descrip_body")
.hide();
答案 2 :(得分:0)
首先如何加载HTML代码段?为什么不在AJAX调用返回时隐藏它?