如何在不使用on方法的情况下使用事件委托?

时间:2014-06-02 06:36:41

标签: jquery

内容是从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.

2 个答案:

答案 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事件,然后再次停止检查。