有没有办法使这个“未定义”的对象安全?

时间:2019-06-21 22:42:35

标签: prototypejs

在Web应用程序的页面上,用户离开文本字段后,继续出现加载屏幕/窗口小部件。

该应用程序正在使用1.6.0.3版。我查看了Prototype 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

问题的具体方法似乎在Prototype.js文件中,该文件=>

        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

1 个答案:

答案 0 :(得分:0)

似乎在getEventID警告/错误触发的地方调用了undefined方法。

在版本1.6.0.3中,getEventID仅在createWrapperstopObserving中被调用,我看到stopObserving在您发布的调用堆栈中,因此我们继续进行讨论。

stopObserving()需要1个必需参数和2个可选参数(element,eventName,handler),如果您仅将该元素传递给函数,它将对其进行查找,然后删除该元素附带的所有PrototypeJS观察者。如果您同时传递eventName和/或处理程序,stopObserving只会专门删除您告诉它的观察者。

话虽如此,如果在调用stopObserving之前将元素从DOM中删除,则可能会导致您看到的错误。

2个可以起作用的修复程序

  • 将呼叫移至stopObserving()上方的电话remove()
  • 注释对stopObserving()的调用,看看页面的行为是否符合您的要求