首页 文章

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

提问于
浏览
0

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

例如,我有这些按钮:

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

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

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

1 回答

  • 1

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

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

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

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

    作为解释,

    • this + ":checkbox" 将始终生成一个像 [object Something]:checkbox 这样的选择器,其中 Something 将根据 this 的值而变化

    • 这将匹配具有属性对象和Something的 :checkbox 元素(参见具有属性选择器),这几乎肯定不是您想要的,并且很可能不匹配任何元素; Actually I'm not sure why this works; [object] is a valid selector, and [object Something]:checkbox is a working (but likely invalid - jQuery bug?) selector but [object Something] is an invalid selector and raises an error

    • 无论元素是否匹配, $("...) 将始终生成一个具有0个或更多元素的jQuery对象,这总是很简单 . 而不是 if ($(...)) { ,你需要检查 if ($(...).length > 0)

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

相关问题