jQuery:如何在div变为可见时绑定事件?
我有一个div元素:
Tab data
。
如何在此div变为可见时绑定自定义事件(获取display: block;
)?
而且当我的div变得不可见时,我想绑定一个事件(获取display: none;
)。
我想在jQuery中这样做。
编辑:我正在使用ajax内容制作简单的标签。 我希望此选项卡上的内容仅在选项卡可见时才进行ajax更新。
根据可见性启动和停止AJAX更新。 您可以使用.is()
为:返回TRUE或FALSE :visible
:
var timer; // Variable to start and top updating timer // This if statement has to be part of the event handler for the visibility // change of selector..... so there might be more straight forward solution // see the last example in this answer. if ($(selector).is(":visible")) { // Start / continue AJAX updating timer = setInterval(AJAXupdate, 1000); } else { // Stop AJAX updating clearInterval(timer); }
这是一个计时器的简单示例,它在不可见时停止。 请注意,当数字不可见时,数字不会继续增加:
(function() { var switcher; // variable to start and stop timer // Function / event that will be started and stopped function count() { $("div").html(1 + parseInt($("div").html(), 10)); } $(function() { // <== doc ready // Start timer - it is visible by default switcher = setInterval(count, 1000); $("input").click(function() { $("div").toggle(); // Toggle timer visibility // Start and stop timer based on visibility if ($("div").is(":visible")) { switcher = setInterval(count, 1000); } else { clearInterval(switcher); } }); }); }());
jsFiddle示例
当然,在上面的情况下,也许是你的情况,更简单的是,更简单地交替打开和关闭更新:
(function() { var switcher; function count() { $("div").html(1 + parseInt($("div").html(), 10)); } $(function() { switcher = setInterval(count, 1000); $("input").toggle(function() { clearInterval(switcher); $("div").toggle(); }, function() { switcher = setInterval(count, 1000); $("div").toggle(); }); }); }());
jsFiddle示例
让事件始终绑定到div,但在事件内部,执行以下操作:
if($(self).is(":visible")){ // Implement your code }
现在只有在元素对用户可见时才会触发您的事件。
我找到的解决方案是在选中选项卡时启动focus
事件。
var tabContainers = $('div.tabs> div'); $('div.tabs ul.tabNavigation a')。click(function(){ tabContainers.each(函数(){ tabContainers.hide()filter(this.hash).show(); if($(this).is(':visible')){ $(本).focus(); //如果选项卡可见,则触发此事件 } else { $(本).blur(); //如果tab不可见 } }); });
然后我抓住了这些focus
和blur
事件:
$(文件)。就绪(函数(){ $( “#tabID”)。结合( “焦点”,函数(){ if($(this).is(“:visible”)){ //在这里开始ajax } }); $( “#标签 '$键。' ”)。绑定(“ 模糊”,函数(){ if(!$(this).is(“:visible”)){ //在这里停止ajax } }); });