内容是从ajax加载的,现在我想隐藏一个段落但是无法实现。
我知道有事件委托如:
$('closest_selector').on('click','selector',function(){});
但我只想隐藏这样的段落:
$('.myclass').next().hide(); //doesn't hide
但如果我这样做:
$(document).on('click','.myclass',function(){
$(this).next().hide();//hides
});
那么,我如何才能使用事件委托:
$('.myclass').next().hide(); //so that it would hide.
答案 0 :(得分:0)
您可以将延迟用于此目的:
function someOperation(){
//ajax stuff
return $.ajax(...);
}
// then somewhere in your code:
someOperation().done(function () {
$('.myclass').next().hide();
});
或者您可以使用事件总线:
var eventTopic = $.Callbacks();
someOperation().done(function (params) { eventTopic.fire(params); })
// then somewhere in your code:
eventTopic.add(function () {
$('.myclass').next().hide();
});
答案 1 :(得分:0)
如果您不想在ajax成功中编写代码,那么您至少可以检查它是否已完成!只需在ajax成功中设置一个全局变量(例如window.succeed = true),然后检查它是否设置为true,true将成功并且typeof window.succeed =='undefined'将失败或仍在尝试!
$(document).on('click','.myclass',function(){
if(window.succeed==true){
$(this).next().hide();
}
else{
return false;
}
});
更新:
setInterval(function(){
if(window.succeed==true){
$('.myclass').next().hide();
}
},500);
UPDATE2:
之前的更新一次又一次地检查它,即使在ajax完成并且任务完成之后,现在如果你只想做一次,你需要使用下面的代码:
var checkAjax=setInterval(function(){
if(window.succeed==true){
$('.myclass').next().hide();
clearInterval(checkAjax);
}
},500);
现在如果ajax调用完成,代码将执行hide事件,然后再次停止检查。