Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to write onshow event using javascript/jquery?

I have an anchor tag on my page, i want an event attached to it, which will fire when the display of this element change.

How can i write this event? and catch whenever the display of this element change?

like image 769
Amr Elgarhy Avatar asked Sep 16 '09 10:09

Amr Elgarhy


People also ask

Can JavaScript trigger events?

HTML events are handled by JavaScript. When an event occurs, it requires some action to be taken. This action can be accomplished through JavaScript event handlers. In addition to JavaScript, jQuery which is equivalent to JavaScript in terms of functionality can also be used to trigger events in a HTML document.

How do you do an event in JavaScript?

JavaScript's interaction with HTML is handled through events that occur when the user or the browser manipulates a page. When the page loads, it is called an event. When the user clicks a button, that click too is an event. Other examples include events like pressing any key, closing a window, resizing a window, etc.

What does show () do in jQuery?

The show() Method in jQuery is used to display the hidden and selected elements. Note: This method display the hidden elements which are using CSS display: none property. The elements are not visible whose visibility is hidden.

What is Onshow?

: put somewhere for people to see Her paintings are on show at the art gallery. The artifacts will be put on show in the museum.


2 Answers

This is my way of doing on onShow, as a jQuery plugin. It may or may not perform exactly what you are doing, however.

(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);

You can call this inside the $(document).ready() function and use a callback to fire when the element is shown, as so.

$(document).ready(function(){
  $('#myelement').onShow(function(){
    alert('this element is now shown');
  });
});

It works by binding a click, keyup, and keydown event to the body to check if the element is shown, because these events are most likely to cause an element to be shown and are very frequently performed by the user. This may not be extremely elegant but gets the job done. Also, once the element is shown, these events are unbinded from the body as to not keep firing and slowing down performance.

like image 80
anson Avatar answered Sep 20 '22 11:09

anson


You can't get an onshow event directly in JavaScript. Do remember that the following methods are non-standard.

IN IE you can use

onpropertychange event

Fires after the property of an element changes

and for Mozilla

you can use

watch

Watches for a property to be assigned a value and runs a function when that occurs.

like image 31
rahul Avatar answered Sep 21 '22 11:09

rahul