The problem can be occur when using/switching to
jQuery 3. It's because all
ready states in the new
jQuery 3 are now fully
asynchron. This means, that there is no given order for your code to be executed.
Because of this, it could happen, that
load is been triggered **before** your
ready state has been executed. When your
ready function now finally gets triggered, your
load listener is too late and will not be executed.
To change this behavior, just remove the
ready state around your
load event listener initialization. There is no need to encapsulate this with a
ready function. You can initialize them without.
If you need or want to register both events, you can register the
load event by yourself and decide inside the
ready state what to do next.
Another case would be jQuery plugins, that uses the
load event too. For example:
If a developer/user now wraps the plugin initialization in a
ready state the problem could happen again, just like explained before:
A solution would be to track the
load event in your plugin on your own, to break out the
Even when this problem not happens to you, in your tests, you should change those code immediately, when using
jQuery 3, because other users/different browser can run into this trouble. Others may got the problem, because it is
asynchron, you could never know when/if your code gets executed ...