jQuery重复选择器错误

我目前正在尝试设置一个包含6个可点击的cels的表,允许输入框出现,这样你就可以添加注释但我得到一个重复的jQuery选择器错误,并且通过调试我的第二个函数,我发现.html()是也没有工作。 这是我的6个函数的代码; 单击特定单元格时调用每个单元格:

 $("#mondayCommentLink").click(function (){ var mondayhtmls = $("#mondayComment"); var input = $(""); input.val(data.days[0].comment); mondayhtmls.html(input); }); $("#tuesdaysCommentLink").click(function (){ var tuesdayhtmls = ("#tuesdayComment"); var inputt = $(""); inputt.val(data.days[1].comment); tuesdayhtmls.html("test"); }); $("#wednesdayCommentLink").click(function (){ var htmls = ("#wednesdayComment"); var input = $(""); input.val(data.days[2].comment); htmls.html(input); }); $("#thursdayCommentLink").click(function (){ var htmls = ("#thursdayComment"); var input = $(""); input.val(data.days[3].comment); htmls.html(input); }); $("#fridayCommentLink").click(function (){ var htmls = ("#fridayComment"); var input = $(""); input.val(data.days[4].comment); htmls.html(input); }); $("#saturdayCommentLink").click(function (){ var htmls = ("#saturdayComment"); var input = $(""); input.val(data.days[5].comment); htmls.html(input); }); 

这就是他们的来源:

        

我不明白为什么我在#mondayCommentLink#tuesdayCommentLink等上出现重复选择器错误。有什么我遗漏或错误地做错了吗? 第一个单元格可以工作,我可以单击它,然后会弹出一个输入框,但它在第二个单元格#tuesdayCommentLink处于tuesday.htmls.html("test");行时tuesday.htmls.html("test");

没有这样的Duplicated jQuery Selector错误; 这是IntelliJ(以及像WebStorm这样的想法的其他IDE)抛出的警告,表明你应该将jQuery选择存储在局部变量中,而不是重复选择。

摘自jQuery文档 :

保存选择

jQuery不会为您缓存元素。 如果您已经做出了可能需要再次进行的选择,则应将选择保存在变量中,而不是重复进行选择。

1| var divs = $( "div" );

一旦选择存储在变量中,就可以在变量上调用jQuery方法,就像在原始选择上调用它们一样。

选择仅在选择时获取页面上的元素。 如果稍后将元素添加到页面中,则必须重复选择或以其他方式将它们添加到存储在变量中的选择。 DOM更改时,存储的选择不会神奇地更新。

但是,在你的代码中没有重复的jQuery选择,所以我敢打赌警告来自其他地方。这与错误在添加缺失的$后仍然存在的事实相符。

通常,将报告的错误添加到您的问题中是一种很好的做法。

“重复选择器”确实是一个JS lint警告,你会在像PHPStorm / WebStorm这样的IDE中看到它。 出于性能原因,您可能希望尽可能缓存选择器。例如:

 (function($) { var $mondayCommentLink = $("#mondayCommentLink"), $mondayHtmls = $("#mondayComment"), $inputMonday = $(""); $mondayCommentLink.on('click', function() { $inputMonday.val(data.days[0].comment); $mondayHtmls.html($inputMonday); }); })(jQuery); 

.. 等等。 我刚刚在星期一做了,但你继续添加一个变量引用到选择器,你可以抓住它已经在内存中。 在处理AJAX时,或者如果你有多个范围,事情会有点复杂,但这是基本的想法。 这只是惯例,但我发现引用var $ elem和camelcased的选择器更容易。

我有同样的错误尝试这样的事情:

 if ($("#checkbox").is(':checked')){ value = $("#checkbox").val(); 

出于某种原因,错误被抛到"#checkbox" 。 我解决了这个问题,包括:

//noinspection JSJQueryEfficiency位于if语句的顶部,如下所示:

  //noinspection JSJQueryEfficiency if ($("#checkbox").is(':checked')){ value = $("#checkbox").val(); 

并且错误消息消失了。