我明白为什么JSLint在这里启动了一个警告,但我不知道如何编写我的代码以便验证。使用JSLint验证removeEventListener
这是一个煮沸的样品。在下面的代码中,我有一个对象,我需要附加两个事件监听器:一个用于“完整”,另一个用于“错误”。每个指向它自己的事件处理程序。当任何一个事件处理程序到达时,我想删除这两个事件处理程序。但是当我试图从第一个事件处理程序中删除第二个事件处理程序的侦听器时,我总是会得到一个验证错误。
var myFunction = function(obj) {
var doComplete = function() {
// ...Do something here to handle successful execution, then remove listeners
obj.removeEventListener('complete',doComplete,true);
obj.removeEventListener('error',handleError,true); // INVALID!
};
var handleError = function() {
// ...Do some error handling here and then remove event listener
obj.removeEventListener('complete',doComplete,true);
obj.removeEventListener('error',handleError,true);
};
obj.addEventListener('complete',doComplete,true);
obj.addEventListener('error',handleError,true);
obj.load();
};
每当我得到这些警告之一,它总是意味着我做错了什么,但在这种情况下,我看不出如何解决这个问题。有谁知道这样做的正确方法是什么?
验证错误是: Lint at line 5 character 41: 'handleError' is not defined.
(Web客户端说:Implied global: handleError 5
)
JSLint不允许您在引用它之前不使用变量。只需将“handleError”添加到预定义的变量列表中,或者忽略“error”(因为它有效) – tcooc 2010-07-25 14:23:12
准确无误。但我通常只使用'/ * global XYZ:true * /'来表示真正全局的东西(比如'console')或我在其他文件中创建的东西,验证器不可能知道 - 但从来没有对于我正在验证的文件中的任何内容。 – Andrew 2010-07-25 14:37:00
将JSLint中的'onevar'选项与Dominic的答案结合使用。 – user123444555621 2010-07-25 22:33:21