2013-02-12 58 views
2

我有图像。当图像被点击时,我会显示一些动画的数据。所以我想要做的就是禁用图像到浏览器中显示的数据。然后一旦数据加载,我需要启用图像。启用并禁用使用Jquery的图像的点击事件?

例如

$("#imageid").click(function(e){ 
//disable the click 
$("idforanim").animate({left : "-=50 "px"},500,function(){callfunction1();}) 
}) 

callfunction1(){ 
//show the data 
//enable the click 
} 

我怎样才能做到这一点?

回答

5

另一种方法是设置一个标志,表明数据仍在处理并取消设置标志上完成:通过利用的事实,即animate需要一个功能

var processing = false; 

$("#imageid").click(function(e){ 
    if (!processing) 
    { 
     //disable the click 
     processing = true; 
     $("idforanim").animate({left : "-=50px"},500,function(){callfunction1();}) 
    } 
}) 

callfunction1(){ 
    //show the data 
    //enable the click 
    processing = false; 
} 
+0

当你说按钮,你的意思是被点击的图像?或者你还有一个单独的按钮? – philreed 2013-02-12 22:15:28

+0

..工作很好:)感谢您的帮助.... – svk 2013-02-12 22:19:57

1

你可以这样做要求完成动画。例如:

http://jsbin.com/adokiz/2

我们做的是这样的:

$(document).ready(function() { 
    var running = false; 
    $('img').on('click', function(event) { 
     if (running) return; 

     running = true; 
     console.log(this); 
     $(this).animate({top: '400px'}, function() { 
     $(this).css({top: 0}); 
     running = false; 
     }); 
    }); 
}); 

使用命名的全局变量running可以防止多次点击来自在同一时间被认可。这与您的代码不完全相同,但您可以轻松调整它。

另一种方式来做到这一点应该是甚至被执行两次更耐是使用jQuery one结合它像这样:

$(document).ready(function() { 
    var animation; 

    var binding = function() { 
    $('img').one('click', animation); 
    }; 

    animation = function(event) { 
    $(event.target).animate({top: '400px'}, function() { 
     $(event.target).css({top: 0}); 
     binding(); 
    }); 
    }; 

    binding(); 
}); 

演示:http://jsbin.com/adokiz/3

+0

我试过了。但它没有工作的方式,我expect.If我慢点击它工作正常。但如果我在做同样的事情不断工作,它没有工作。 – svk 2013-02-12 22:05:45

+0

你的意思是连续点击或者什么?缺乏“没有工作”部分的细节:)。 – Cymen 2013-02-12 22:07:33

+0

对不起,我犯了一个错误,从我身边.anyway同样的想法上面,所以我接受因为发布早些时候的答案... :)继续帮助... – svk 2013-02-12 22:10:05

0

使用unbind方法:

var clickHandle = function(){ 
    $(this).unbind('click', clickHandle); 
    callfunc(); 
}; 
var callfunc = function(){ 
    // do your stuff 
    $('#imageid').click(clickHandle);// reinstall click handle 
}; 
$('#imageid').click(clickHandle);