Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么JSHint警告我使用';这';在回调函数中?_Javascript_Jquery_Jshint - Fatal编程技术网

Javascript 为什么JSHint警告我使用';这';在回调函数中?

Javascript 为什么JSHint警告我使用';这';在回调函数中?,javascript,jquery,jshint,Javascript,Jquery,Jshint,我使用的IDE()合并了JSHint,当它检测到错误时会给我一个警告。作为一项原则,我尝试更正代码以更正这些错误。有一个我现在看不到的方法: $("#component-manager tr:not(.edit-component) td").on("click", function() { if ($(this).index() !== 0) { var checkbox = $(this).parent().find("input[name=component-sel

我使用的IDE()合并了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试图推广这一点)

  • 您的代码没有任何错误,也没有任何“更好”的编码方式。这正是jsHint所做的,可能只是因为有些人在其他类型的回调中使用
    This
    时出错

    您可以在代码中插入一条注释,告诉jsHint忽略这个特殊用法。我会去看看我是否能找到它,如果我找到了,我会把它添加到我的答案中。您可以使用jsHint的
    validthis
    选项:忽略特定函数的此警告

    我自己没有尝试过,但根据文档,您可以将此添加到函数中:

    /* jshint validthis: true */
    

    或者,配置文件可以与jshint一起使用,以更改此选项的默认值(您必须弄清楚如何在IDE中执行此操作)。

    您的代码没有问题,也没有任何“更好”的编码方式。这正是jsHint所做的,可能只是因为有些人在其他类型的回调中使用
    This
    时出错

    您可以在代码中插入一条注释,告诉jsHint忽略这个特殊用法。我会去看看我是否能找到它,如果我找到了,我会把它添加到我的答案中。您可以使用jsHint的
    validthis
    选项:忽略特定函数的此警告

    我自己没有尝试过,但根据文档,您可以将此添加到函数中:

    /* jshint validthis: true */
    

    或者,配置文件可以与jshint一起使用,以更改此选项的默认值(您必须弄清楚如何在IDE中执行此操作)。

    该代码没有问题,您的IDE就是不智能。在我的IDE中,函数总是返回一些东西,但由于我使用了条件if和else,它给了我一个警告,可能不会返回任何东西,并添加了“void”(使用XCode)。做我所做的,忽略它


    如果它让你感到非常不舒服,并且只有在你使用
    this
    时才会发生这种情况,你可以照洛夫拉德说的做,使用
    函数(e){
    并替换
    $(this)
    使用
    e.target

    该代码没有问题,您的IDE就是不智能。在我的IDE中,函数总是返回一些东西,但由于我使用了条件if和else,它给了我一个警告,可能不会返回任何东西并添加“void”(使用XCode)。按我所做的做,忽略它


    如果它给你带来了极大的麻烦,并且这种情况只发生在你使用
    this
    时,你可以按照洛夫拉德说的做,使用
    函数(e){
    并用
    e.target

    替换
    $(this)
    ,这来自于通常错误实现的
    this
    模式。请参阅示例

    通常有更好的方法来获取对相关对象的引用。在这种情况下,您需要向回调函数声明一个参数,并显式引用事件目标

    $("#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");
        }
    });
    

    这来自于通常错误实现的
    This
    模式。有关示例,请参阅

    通常有更好的方法来获取对相关对象的引用。在这种情况下,您需要向回调函数声明一个参数,并显式引用事件目标

    $("#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");
        }
    });
    

    我认为IDE中有一个bug或一个错误配置。在这样的jQuery回调中使用<代码>这个<代码>是明确和热情的鼓励。JSHIT不给我任何警告或错误。您可以使用<代码>函数(e){ $(e目标)…<代码>,而不是<代码>函数(){$(这个)…改进代码的唯一方法是缓存jQuery对象:
    var$this=$(this)它不会被排除在错误中,但是它被认为是好的实践,特别是如果你一再重复做同样的选择。可能不是你需要的东西,而是将来的代码要考虑的事情。我会考虑IDE中的bug或错误配置。非常鼓励。JShint不会给我任何警告或错误。您可以使用
    function(e){$(e.target).
    而不是
    function(){$(this).
    可以改进代码的唯一方法是缓存jQuery对象:
    var$this=$(this)这是一个很好的实践,特别是如果你一再重复做同样的选择。可能不是你需要的东西,而是将来要考虑的代码。我现在正在按照你的建议去做。它对我没有太大的影响,但正如@俄勒冈州的建议,我认为这是一个更好的方法。我想这是一种效率较低的机制:我可以容忍错误!(更改答案…)我现在正在按照你的建议做。这不会让我太烦恼,但正如@OregonTrail所建议的,我认为这是一种更好的方式。@jfriend00我想这是一种效率较低的机制:我可以容忍错误!(改变答案…)