我使用的IDE(Cloud 9)通过在检测到错误时向我发出警告来合并JSHint。作为一个原则,我尝试纠正我的代码来纠正这些错误。我现在有一个我看不到的方法:
$("#component-manager tr:not(.edit-component) td").on("click", function() {
if ($(this).index() !== 0) {
var checkbox = $(this).parent().find("input[name=component-selected]");
checkbox.trigger("click");
}
});
此代码向我发出警告:“在回调函数中使用'this
'”。
我有两个问题:
this
更好的做法(因为这是JSHint试图推广的)?答案 0 :(得分:3)
您的代码没有任何问题,也没有任何“更好”的代码编码方式。这只是jsHint所做的事情,也许只是因为有些人在其他类型的回调中使用this
会犯错误。
您可以在代码中插入一条注释,告诉jsHint忽略此特定用途。如果我找到它,我会去看看我是否能找到它并将其添加到我的答案中。您可以使用jsHint的validthis
选项:http://www.jshint.com/docs/options/#validthis忽略特定功能的此警告。
我自己没有尝试过,但根据文档,您可以将其添加到函数中:
/* jshint validthis: true */
或者,配置文件可以与jshint一起使用,更改此选项的默认值(您必须弄清楚如何在IDE中执行此操作)。
答案 1 :(得分:1)
该代码没有任何问题,您的IDE并不聪明。在我的IDE中,函数总是返回一些东西,但由于我使用条件if和else,它给了我一个警告,可能没有任何东西会被返回并添加'void'(使用XCode)。做我做的事,忽略它。
如果它极其烦扰,而这只会在您使用this
时发生,您可以执行lordvlad所说的内容并使用function(e){
并将$(this)
替换为e.target
。< / p>
答案 2 :(得分:1)
这来自通常误解的this that
模式。有关示例,请参阅this question。
通常有更好的方法来获取对相关对象的引用。在这种情况下,您需要声明回调函数的参数并明确引用事件目标。
$("#component-manager tr:not(.edit-component) td").on("click", function(event) {
if ($(event.target).index() !== 0) {
var checkbox = $(event.target).parent().find("input[name=component-selected]");
checkbox.trigger("click");
}
});