JavaScript 中的有限状态机,第 3 部分: 测试小部件
2010-09-14 13:20:44 来源:WEB开发网图 4. Firefox 中意外的 mousemove 事件
幸运的是,为 Internet Explorer 所做的 Inactive 状态修改可以正确地处理这种情况,所以不需要做进一步修改来克服这个设计缺陷。
不幸的是,实现这些修改之后的后续测试发现 Internet Explorer 有另一个不应该发生的情况:在 Pause 状态下出现意外的 mouseover 事件。
因为 Pause 状态下 mouseover 事件需要的操作和转换与 Inactive 状态下的 mouseover 事件一样,所以可以通过调用 doActionTransaction 方法来处理这种情况。但是,没有合理的事件序列会让其他浏览器进入这种情况(至少我没有发现),所以只为 Internet Explorer 实现这个设计修改,如清单 6 所示。
清单 6. 处理只在 Internet Explorer 中发生的意外事件的 JavaScript 代码
FadingTooltip.prototype = {
...
actionTransitionFunctions: {
...
},
...
};
if ( (window.navigator.userAgent).indexOf('MSIE')!=-1 ) {
FadingTooltip.prototype.actionTransitionFunctions["Pause"]["mouseover"] =
function(event) { return
this.doActionTransition('Inactive', 'mouseover', event);
};
}
如果浏览器是某个版本的 Internet Explorer,那么修改 FadingTooltips 原型的 actionTransitionFunctions 表(在定义它之后,但在使用它之前),按照与 Inactive 状态下的 mouseover 事件相同的方式处理 Pause 状态下的 mouseover 事件。请记住,在 JavaScript 中,关联数组和对象是等效的,所以可以使用这两种表示法之一修改这个表。
Tags:JavaScript 有限 状态
编辑录入:爽爽 [复制链接] [打 印]更多精彩
赞助商链接