Normally the execution of a setTimeout() method is aborted by a clearTimeout() method that is outside of the setTimeout() method, but in my situation I need to abort the execution of a setTimeout() loop within the loop itself if a certain event occurs during the designated "waiting period".
In my code shown below, the user gets 500 milliseconds to activate Code A. If he fails to activate Code A within the time frame, Code B will be executed as a fallback. Within Code A I have marked two places: 1) the place to stop the timeout and 2) the place where I wish to exit the function.
My jsFiddle is here.
A copy of my JavaScript and HTML codes is shown below:
HTML
<table id="headMenu">
<tr>
<td id="head1">Item 1</td>
<td id="head2">Item 2</td>
<td id="head3">Item 3</td>
</tr>
</table>
<table id="subMenu">
<tr>
<td>Dynamic Content!</td>
</tr>
</table>
JavaScript
a = 500;
document.getElementById("head1").onmouseover = function(displayMenu) {
document.getElementById("subMenu").innerHTML = "<tr><td>Item A</td><td>Item B</td><td>Item C</td></tr>";
document.getElementById("head1").onmouseout = function(getScroll) {
setTimeout(function() {
document.getElementById("subMenu").onmouseover = function(breakTimeout) { // **Code A**
a = 10000;
// **Stop timeout.** Now never execute Code B.
document.getElementById("subMenu").onmouseout = function(endFunction) {
document.getElementById("subMenu").innerHTML = '<tr><td>Content is Dynamic!</td></tr>';
// **Exit function here immediately**
}
}
if(a==500){
//**Code B**: Only execute if **Code A** never executed within time frame
document.getElementById("subMenu").innerHTML = '<tr><td>Dynamic Content!</td></tr>';
}
}, a)
}
}
I hope the concept of my design is also evident. If my code and description is not clear enough, I'll be glad to clarify further questions.
Thanks a lot and +1 to anybody who can get the answer!