Javascript - 比较是否标记了任何复选框
Javascript - Compare if any checkbox is marked or not
当然这里有很多解决这个问题的方法,但是我没有找到适合我的解决方法。
我有一个带有多个复选框的表单来选择一个选项(radio1a、radio1b、radio1c 等),但是在提交表单之前我无法检测到我的用户是否没有选中一个框。
我已经尝试了示例脚本,但是警报随页面一起加载,这不是我要找的。
注意: “选中”选项(对于任何复选框)对我来说是不可能的,我必须取消选中所有复选框。
我做错了什么?
提前致谢!
HTML:
<input id="radio1a" class="radiosobres" type="radio" name="radio" value="something>
<input id="radio1b" class="radiosobres" type="radio" name="radio" value="something>
<input id="radio1c" class="radiosobres" type="radio" name="radio" value="something>
<input id="radio1d" class="radiosobres" type="radio" name="radio" value="something>
<input id="radio1e" class="radiosobres" type="radio" name="radio" value="something>
<!-- ============== -->
<input id="pedir-sobres" type="submit" value="Pedir"/>
脚本 测试:
// ===========
jQuery 2.2.4
// ===========
$(".radiosobres").each(function () {
var id = $(this).attr("id");
if ($("#" + id).is(":not(:checked)")) {
alert("something...");
}
});
这里有几件事。首先,您的警报正在触发,因为您将其设置为在收音机 未选中 时触发。因此,一旦页面加载,每个元素都会运行该函数,未检查的条件为真,并触发警报。
其次,您的 HTML 中存在一些语法问题。去掉参数字符串中的多余空格,最重要的是,不要忘记 HTML <inputs>
中最后的双引号 "
。在您的示例中,每个 value="something
参数都缺少其结束 "
.
最后,您不需要 JQuery 来确保选择其中一个收音机。 Just mark one as required:
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
<form>
<input id="radio1a" class="radiosobres" type="radio" name="radio" value="something" required>
<input id="radio1b" class="radiosobres" type="radio" name="radio" value="something">
<input id="radio1c" class="radiosobres" type="radio" name="radio" value="something">
<input id="radio1d" class="radiosobres" type="radio" name="radio" value="something">
<input id="radio1e" class="radiosobres" type="radio" name="radio" value="something">
<!-- ============== -->
<input id="pedir-sobres" type="submit" value="Pedir">
</form>
我在每个单选按钮上设置了一个点击事件,它添加了一个 class clicked
。因此,如果您单击 submit-button,我可以检查哪个收音机具有 clicked-class,您可以为此采取行动。
$(".radiosobres").click( function() {
$(this).addClass('clicked');
}
)
$('#pedir-sobres').click(function() {
let checkOk = false;
$(".radiosobres").each(function () {
if ( $(this).hasClass('clicked') ) {
checkOk = true;
}
})
if (!checkOk) {
alert('Not all radios checked');
return false;
}
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
<form>
<input id="radio1a" class="radiosobres" type="radio" name="radio" value="something">
<input id="radio1b" class="radiosobres" type="radio" name="radio" value="something">
<input id="radio1c" class="radiosobres" type="radio" name="radio" value="something">
<input id="radio1d" class="radiosobres" type="radio" name="radio" value="something">
<input id="radio1e" class="radiosobres" type="radio" name="radio" value="something">
<!-- ============== -->
<input id="pedir-sobres" type="submit" value="Pedir"/>
</form>
当然这里有很多解决这个问题的方法,但是我没有找到适合我的解决方法。
我有一个带有多个复选框的表单来选择一个选项(radio1a、radio1b、radio1c 等),但是在提交表单之前我无法检测到我的用户是否没有选中一个框。
我已经尝试了示例脚本,但是警报随页面一起加载,这不是我要找的。
注意: “选中”选项(对于任何复选框)对我来说是不可能的,我必须取消选中所有复选框。
我做错了什么?
提前致谢!
HTML:
<input id="radio1a" class="radiosobres" type="radio" name="radio" value="something>
<input id="radio1b" class="radiosobres" type="radio" name="radio" value="something>
<input id="radio1c" class="radiosobres" type="radio" name="radio" value="something>
<input id="radio1d" class="radiosobres" type="radio" name="radio" value="something>
<input id="radio1e" class="radiosobres" type="radio" name="radio" value="something>
<!-- ============== -->
<input id="pedir-sobres" type="submit" value="Pedir"/>
脚本 测试:
// ===========
jQuery 2.2.4
// ===========
$(".radiosobres").each(function () {
var id = $(this).attr("id");
if ($("#" + id).is(":not(:checked)")) {
alert("something...");
}
});
这里有几件事。首先,您的警报正在触发,因为您将其设置为在收音机 未选中 时触发。因此,一旦页面加载,每个元素都会运行该函数,未检查的条件为真,并触发警报。
其次,您的 HTML 中存在一些语法问题。去掉参数字符串中的多余空格,最重要的是,不要忘记 HTML <inputs>
中最后的双引号 "
。在您的示例中,每个 value="something
参数都缺少其结束 "
.
最后,您不需要 JQuery 来确保选择其中一个收音机。 Just mark one as required:
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
<form>
<input id="radio1a" class="radiosobres" type="radio" name="radio" value="something" required>
<input id="radio1b" class="radiosobres" type="radio" name="radio" value="something">
<input id="radio1c" class="radiosobres" type="radio" name="radio" value="something">
<input id="radio1d" class="radiosobres" type="radio" name="radio" value="something">
<input id="radio1e" class="radiosobres" type="radio" name="radio" value="something">
<!-- ============== -->
<input id="pedir-sobres" type="submit" value="Pedir">
</form>
我在每个单选按钮上设置了一个点击事件,它添加了一个 class clicked
。因此,如果您单击 submit-button,我可以检查哪个收音机具有 clicked-class,您可以为此采取行动。
$(".radiosobres").click( function() {
$(this).addClass('clicked');
}
)
$('#pedir-sobres').click(function() {
let checkOk = false;
$(".radiosobres").each(function () {
if ( $(this).hasClass('clicked') ) {
checkOk = true;
}
})
if (!checkOk) {
alert('Not all radios checked');
return false;
}
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
<form>
<input id="radio1a" class="radiosobres" type="radio" name="radio" value="something">
<input id="radio1b" class="radiosobres" type="radio" name="radio" value="something">
<input id="radio1c" class="radiosobres" type="radio" name="radio" value="something">
<input id="radio1d" class="radiosobres" type="radio" name="radio" value="something">
<input id="radio1e" class="radiosobres" type="radio" name="radio" value="something">
<!-- ============== -->
<input id="pedir-sobres" type="submit" value="Pedir"/>
</form>