the problem is likely your use of ready(). ready() will only fire once, when the page loads.
if you don't reload the page, guess what? you don't re-fire ready().
this is a huge obstacle for many folks, and there is no simple answer.
what you need to do is manually re-fire those ready events. Problem with that: sometimes it breaks certain plugin functionality to load them twice. An example would be a script that adds mouse events to a nav menu: it can get applied twice, causing a flickering to occur.
on the other hand, sometimes you need to call the ready stuff each virtual page load. an example of this would be turning a <ul> of images into a slideshow: new html needs new treatment.
so, there is no one-size-fits-all answer.
the main challenge with re-calling ready() is that the ready functions are not kept around by jQuery, so you can't loop through them and simply re-invoke them. One way around this is by sneaking a collector assignment into the ready call. This is invisible to jQuery, and shouldn't affect its normal operation at all.
before you load any code, define a collector:
then modify all the readys you need later by tucking the ready function into the array:
Code:
$(document).ready(function(){ ...
becomes
Code:
$(document).ready( myload[myload.length]= function()
when you want to "Reload", you can simply call
Code:
myload.map(function(a){a();});
to re-invoke all the readys you tagged.
now, what about that problem where some script shouldn't run each time?
you fix that with a global variable indication that the page has already been loaded, and using an if ststemnt in your ready functions around each run-once section.
Code:
window.onload=function(){ loaded=true;};
and then in a ready():
Code:
if(!loaded){
//do something only once per tab opening
}
in this fashion, you have much more control over page initialization; separating the site initialization from the page, something jQuery alone isn't setup to do.
good luck!