Это мой способ работы с onShow в качестве плагина jQuery. Однако он может выполнять или не выполнять точно то, что вы делаете.
(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);
Вы можете вызвать это внутри функции $ (document) .ready () и использовать обратный вызов для запуска при отображении элемента, как показано ниже.
$(document).ready(function(){
$('#myelement').onShow(function(){
alert('this element is now shown');
});
});
Он работает путем привязки события click, keyup и keydown к телу, чтобы проверить, отображается ли элемент, потому что эти события, скорее всего, вызывают показ элемента и очень часто выполняются пользователем. Это может быть не очень элегантно, но делает работу. Кроме того, после того, как элемент показан, эти события открепляются от тела, чтобы не продолжать стрельбу и замедлять работу.