JavaScript Race Conditions
About a week ago I posted how to handle Multiple Cascadiong Drop Downs using MS Ajax. That worked, except sometimes it didn't work.
Took me a while to figure out that there was a race condition there. Let me tell you, Javascript in the browser is not the language for tracking down threading issues. At any rate, here is the fix.
function changeOnParentChangeOnProductsToAvoidRaceConditions()
{
var behaviors = Sys.UI.Behavior.getBehaviors($('<%=Benefits.ClientID%>'));
if(behaviors == null || behaviors.legth==0)
{
//wait for the behavior to be defined.
setTimeout("changeOnParentChangeOnPoliciesToAvoidRaceConditions()", 10);
return;
}
for( var i=0; i<behaviors.length;i++)
{
var behavior = behaviors[i];
//required to get around race condition
behavior._oldBenefitsOnParentChange = behavior._onParentChange;
behavior._onParentChange = function()
{
if( $('<%= Insurances.ClientID %>').selectedIndex == 0)
{
return;
}
behavior._oldBenefitsOnParentChange ();
}
}
}
Event.observe(window, 'load', function() {
changeOnParentChangeOnProductsToAvoidRaceConditions();
});
Comments
Uh-oh, there's another bug...
line 4:
if(behaviors == null || behaviors.legth==0)
should be:
if(behaviors == null || behaviors.length==0)
length is missing the n.
Keep up the good work, my friend.
Comment preview