Đây là cách tôi thực hiện trên onShow, như một plugin jQuery. Nó có thể hoặc có thể không thực hiện chính xác những gì bạn đang làm, tuy nhiên.
(function($){
$.fn.extend({
onShow: function(callback, unbind){
return this.each(function(){
var _this = this;
var bindopt = (unbind==undefined)?true:unbind;
if($.isFunction(callback)){
if($(_this).is(':hidden')){
var checkVis = function(){
if($(_this).is(':visible')){
callback.call(_this);
if(bindopt){
$('body').unbind('click keyup keydown', checkVis);
}
}
}
$('body').bind('click keyup keydown', checkVis);
}
else{
callback.call(_this);
}
}
});
}
});
})(jQuery);
Bạn có thể gọi hàm này bên trong hàm $ (document) .ready() và sử dụng gọi lại để kích hoạt khi phần tử được hiển thị, như vậy.
$(document).ready(function(){
$('#myelement').onShow(function(){
alert('this element is now shown');
});
});
Nó hoạt động bằng cách gắn một nhấp chuột, KeyUp, và sự kiện KeyDown cho cơ thể để kiểm tra xem phần tử được hiển thị, vì những sự kiện này có nhiều khả năng gây ra một yếu tố để được hiển thị và rất thường xuyên được thực hiện bởi người dùng. Điều này có thể không cực kỳ thanh lịch nhưng hoàn thành công việc. Ngoài ra, khi phần tử được hiển thị, các sự kiện này không bị chặn khỏi cơ thể để không tiếp tục kích hoạt và làm chậm hiệu suất.
Còn WebKit thì sao? – chakrit
Điều gì sẽ là tiêu chuẩn cho điều này? – vmassuchetto