为什么这个脚本会在页面上的每个单选按钮和复选框上添加一个类,而不是每个复选框/单选按钮的那个?
例如,我有这些按钮:
<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");
};
};
});
单击按钮时会触发脚本。如果未选中任何框,则每个标签都会添加一个错误,这是正确的。但是,如果选中一个框,则没有标签会出现错误,这是不正确的。如果我选中第一组中的复选框,但未选中单选按钮,则应将该单选按钮标记为错误。
注意:我知道这个脚本还没有形成输入名称(因此,如果选中一个具有相同名称的复选框,另一个当前会显示错误),我正试图让他的错误得到解决在前进之前。
答案 0 :(得分: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
:checkbox
和object
属性的Something
元素[object]
是一个有效的选择器,[object Something]:checkbox
是一个有效的(但可能是无效的 - jQuery错误?)选择器,但[object Something]
是一个无效的选择器并引发错误 $("...)
,总是生成一个包含0个或更多元素的jQuery对象,总是真实。您需要检查if ($(...)) {
if ($(...).length > 0)
醇>
总而言之,你正在生成一个无效的选择器(通过一些jQuery的怪癖)不会引发错误,但会返回完全伪造的结果。