Skip to content

Instantly share code, notes, and snippets.

@buu700
Forked from BrockA/waitForKeyElements.js
Created December 4, 2012 04:37
Show Gist options
  • Save buu700/4200601 to your computer and use it in GitHub Desktop.
Save buu700/4200601 to your computer and use it in GitHub Desktop.
jQuery plugin which runs handler function once specified element is inserted into the DOM
(function ($) {
/**
* @function
* @property {object} jQuery plugin which runs handler function once specified element is inserted into the DOM
* @param {function} handler A function to execute at the time when the element is inserted
* @param {bool} shouldRunHandlerOnce Optional: if true, handler is unbound after its first invocation
* @example $(selector).waitUntilExists(function);
*/
$.fn.waitUntilExists = function (handler, shouldRunHandlerOnce, isChild) {
var found = 'found';
var $this = $(this.selector);
var $elements = $this.not(function () { return $(this).data(found); }).each(handler).data(found, true);
if (!isChild)
{
(window.waitUntilExists_Intervals = window.waitUntilExists_Intervals || {})[this.selector] =
window.setInterval(function () { $this.waitUntilExists(handler, shouldRunHandlerOnce, true); }, 500)
;
}
else if (shouldRunHandlerOnce && $elements.length)
{
window.clearInterval(window.waitUntilExists_Intervals[this.selector]);
}
return $this;
}
}(jQuery));
@uwanius
Copy link

uwanius commented Apr 25, 2013

Hi, thank you for this great plugin. But how it is possible to run the function not only once, but every time.
I used it in the flexslider plugin to find out when a slider is active and then add a special class to the navigation.

my code:

var secondSlide =$("#secondary-slider li:eq(1).flex-active-slide");
var next2 = $('#home .flex-direction-nav li:eq(1) a');

$(secondSlide).waitUntilExists(function() {
next2.addClass('flex-disabled')
});

This works fine, but only at once.

@PizzaBrandon
Copy link

I forked and improved on your code a bit, if you want to pull in some or all of my changes. Thanks!

@alexbeletsky
Copy link

Thanks a lot!

@beames
Copy link

beames commented Oct 11, 2014

Thanks!!!! Immediately solved the problem

@dsanatelli
Copy link

Thanks !!

@kdamken
Copy link

kdamken commented Mar 10, 2015

Thank you so much, this solved a very large headache for me!

@rorycaraher
Copy link

Brilliant and easy! Thank you for this.

@code2be
Copy link

code2be commented May 10, 2015

Thank You for this great piece of code !

@rpoddighe
Copy link

I love you. Not a pretty fix in my case but it does the trick.

@diegommarino
Copy link

Thank you so much! That's perfect!

@360disrupt
Copy link

Exactly what I'm looking for.

@tonyporto
Copy link

Just had to stop by and say Thanks man, this is the only plugin that worked for me, nice clean, simple.. Good work

@ChristianLuxem
Copy link

This is not working anymore in Jquery3, because the .selector function was removed.

@ChaosPredictor
Copy link

Any suggestion for Rails 5?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment