在 Web 应用程序的页面上,用户离开文本字段后,加载屏幕/小部件继续显示。
该应用程序使用的是版本 1.6.0.3。 我查看了最新版本的原型1.7.3,但没有找到该功能。
调用此方法时,我还测试了其他实例。 如果没有用户输入,则小部件不会挂起。
此错误会显示在 Chrome 开发者工具的控制台中。
at E (framework.pack.js:1699)
at Function.stopObserving (framework.pack.js:1732)
at A.hide (ui.pack.js:13410)
at A.render (ui.pack.js:13591)
at A.updateChoices (ui.pack.js:13650)
at A.onComplete (ui.pack.js:13786)
at Object.oncomplete (framework.pack.js:76)
at framework.pack.js:2748
有问题的具体方法似乎在原型中.js文件 this =>
if (element._prototypeEventID) return element._prototypeEventID[0];
arguments.callee.id = arguments.callee.id || 1;
return element._prototypeEventID = [++arguments.callee.id];
}
我希望加载小部件在保存完成后消失,但它仍在页面上。 Chrome开发者工具的控制台也有第二个错误:
validateFormCheck @ common.js:1031
看起来getEventID
方法正在触发undefined
警告/错误的地方调用。
在版本 1.6.0.3 中,getEventID
仅在 createWrapper
和 stopObserving
中调用,我看到 stopObserve 在您发布的调用堆栈中,所以让我们继续那个。
stopObserving()
采用 1 个必需参数和 2 个可选参数(元素、eventName、处理程序(,如果您只将元素传递给它查找它的函数,然后删除附加到该元素的所有 PrototypeJS 观察器。如果您同时传递事件名称和/或处理程序,则 stopObserve 只会专门删除您告诉它的观察者。
话虽如此,如果在调用 DOM 之前从 DOM 中删除stopObserving
这可能会导致您看到的错误。
2个可行的修复程序
- 将呼叫移动到
stopObserving()
上方的呼叫移动到remove()
- 注释掉对
stopObserving()
的调用,看看页面的行为是否符合您的要求