As you know, the issue is that different browsers choose to call event handlers in different orders. One solution is to give the other events a chance to fire by setting a timer for 0
milliseconds, and then checking the fields to see which (if any) is focused.
a.onfocus = function() {show(b);};
a.onblur = function() {
setTimeout(function() {
//if neither filed is focused
if(document.activeElement !== b && document.activeElement !== a){
hide(b);
}
}, 0);
};
//same action as for a
b.onblur = a.onblur;
Tested in Chrome, Firefox, Internet Explorer, and Safari. See full working example (edited version of your fiddle) at JSFiddle.net.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…