Esta es mi manera de hacer en onShow, como un plugin jQuery. Sin embargo, puede o no realizar exactamente lo que estás haciendo.
(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);
Puede llamar a este dentro de la función $ (document) ready() y utilizar una devolución de llamada para disparar cuando se muestra el elemento, como tal.
$(document).ready(function(){
$('#myelement').onShow(function(){
alert('this element is now shown');
});
});
Funciona mediante la unión de un clic, keyup, y el evento KeyDown al cuerpo para comprobar si se muestra el elemento, porque estos eventos son más propensos a causar un elemento que se muestra y se realizan con mucha frecuencia por la usuario. Esto puede no ser extremadamente elegante, pero hace el trabajo. Además, una vez que se muestra el elemento, estos eventos se desenredan del cuerpo para no seguir disparando y ralentizando el rendimiento.
¿Qué hay de WebKit? – chakrit
¿Cuál sería el estándar para esto? – vmassuchetto