【问题标题】:jQuery Selector Expected预期的 jQuery 选择器
【发布时间】:2010-12-17 03:08:49
【问题描述】:

我的 jQuery 代码有问题,我的 Firebug 给我警告:需要选择器。

代码如下:

$("img[id$='_tick']").each(function() {

    $(this).click(function() {

        var tickIDFinder = $(this).attr("id");
        var tickSection = tickIDFinder.slice(0,1);

        var checkboxID = "\"input[id^='" + tickSection + "_checkbox_']\"";
        var airTableID = "#" + tickSection + "_airline_table tr";

        $(checkboxID).each(function() {

            if ( $(this).is('checked') ) {
                alert("Checkbox is Checked.");
            }

            $(this).attr('checked','checked');

        });

    });

});

我要做的是编写一个 jQuery 以允许用户单击链接(作为图像)。当用户单击此图像时,它将“选中”所有指定的复选框。然后我会收到来自 Firebug 的 Selector 预期警告。

jQuery 本身正在按我的预期工作。我只是想尝试修复警告。

有人可以帮忙吗?我真的很感激。

非常感谢您的想法。

【问题讨论】:

    标签: jquery jquery-selectors css-selectors


    【解决方案1】:

    替换

    var checkboxID = "\"input[id^='" + tickSection + "_checkbox_']\"";
    

    var checkboxID = "input[id^='" + tickSection + "_checkbox_']";
    

    (除了@rahul 所说的:)

    【讨论】:

    • 谢谢你。一旦我改变了这个,并且 :checked,我就不会再收到警告了。
    【解决方案2】:

    除了其他答案之外,还可以进一步简化,如下所示:

    $("img[id$='_tick']").click(function() {
      var tickSection = this.id.slice(0,1);
    
      var checkboxID = "input[id^='" + tickSection + "_checkbox_']";
      var airTableID = "#" + tickSection + "_airline_table tr";
    
      $(checkboxID).each(function() {
          if (this.checked) {
              alert("Checkbox is Checked.");
          }
          $(this).attr('checked', true);
      });
    });
    

    这里有几件事:

    • 您不需要.each(),只需.click(),它将绑定到所有这些。
    • 在可用时使用 DOM 属性,例如this.idthis.checked
    • checkboxID 的选择器有多余的引号,删除它们

    可能没有调试,它甚至更简单,因为.attr() 也适用于多个元素:

    $("img[id$='_tick']").click(function() {
      $("input[id^='" + this.id.slice(0,1) + "_checkbox_']").attr('checked', true);
    });
    

    【讨论】:

    • 我得到了一些参考,说 .each() 和 .click() 可能对我没有任何好处。感谢您为我确认。
    【解决方案3】:

    替换

    if ( $(this).is('checked'))
    

    if ( $(this).is(':checked'))
    

    :checked

    你可以使用this.id,它会比$(this).attr("id")更快

    var tickIDFinder = this.id;
    

    【讨论】:

    • 虽然这在他所追求的方面是正确的......但这不会导致他得到的错误,$(this).is(':checked') 应该是 this.checked 无论如何。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-06
    • 1970-01-01
    相关资源
    最近更新 更多