为什么这个脚本为页面上的每个单选按钮和复选框标签添加一个类,而不是每个单独的复选框/单选按钮?
例如,我有这些按钮:
<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 回答
这些代码行是完全无稽之谈,他们无法做任何有用或理智的事情:
我怀疑你正在努力......
作为解释,
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的怪癖)不会引发错误,但它会返回完全伪造的结果 .