jQuery脚本为每个单选按钮和复选框标签添加类

时间:2013-01-18 17:13:03

标签: javascript jquery

为什么这个脚本会在页面上的每个单选按钮和复选框上添加一个类,而不是每个复选框/单选按钮的那个?

例如,我有这些按钮:

<input class="required" id="Example31" name="Example3" type="checkbox" />
<label for="Example31">Example Input 3 Option 1</label>

<input class="required" id="Example32" name="Example3" type="checkbox" />
<label for="Example32">Example Input 3 Option 2</label>

<input class="required" id="Example4" name="Example4" type="radio" />
<label for="Example4">Example Input 4</label>

这个脚本:

$("input.required").each(function() {
    if ($(this + ":checkbox") || $(this + ":radio")) {
        if (!$(this + ":checked").val()) {
            var inputId = $(this).attr("id");
            $("label[for=" + inputId + "]").addClass("error");
        };
    };
});

单击按钮时会触发脚本。如果未选中任何框,则每个标签都会添加一个错误,这是正确的。但是,如果选中一个框,则没有标签会出现错误,这是不正确的。如果我选中第一组中的复选框,但未选中单选按钮,则应将该单选按钮标记为错误。

注意:我知道这个脚本还没有形成输入名称(因此,如果选中一个具有相同名称的复选框,另一个当前会显示错误),我正试图让他的错误得到解决在前进之前。

1 个答案:

答案 0 :(得分:1)

这些代码行是完全无稽之谈,他们无法做任何有用或理智的事情:

if ($(this + ":checkbox") || $(this + ":radio")) {
    if (!$(this + ":checked").val()) {

我怀疑你正在努力......

if ($(this).is(":checkbox") || $(this).is(":radio")) {
    if (!$(this).is(":checked")) {

作为解释,

  1. this + ":checkbox"始终生成[object Something]:checkbox之类的选择器,其中Something将根据this
  2. 的值而有所不同
  3. 这将匹配具有:checkboxobject属性的Something元素,(请参阅Has Attribute selector,这几乎肯定不是你的想要并且很可能不匹配任何元素; 实际上我不确定为什么这样有效; [object]是一个有效的选择器,[object Something]:checkbox是一个有效的(但可能是无效的 - jQuery错误?)选择器,但[object Something]是一个无效的选择器并引发错误
  4. 无论元素是否匹配$("...)总是生成一个包含0个或更多元素的jQuery对象,总是真实。您需要检查if ($(...)) {
  5. ,而不是if ($(...).length > 0)

    总而言之,你正在生成一个无效的选择器(通过一些jQuery的怪癖)不会引发错误,但会返回完全伪造的结果。

相关问题