javascript - JQuery(3.3.1)复选框组合无法返回预期值
问题描述
JQuery(版本 3.3.1)复选框实现有点麻烦。请参阅下面的代码示例。
问题
选择每个组合都可以完美地工作,除了一个,我似乎无法查明代码中的缺陷。选择非工作组合时,控制台也不会抱怨。非工作组合:
[✓] 复选框 1
[ ] 复选框 2
[✓] 复选框 3
[✓] 复选框 4
要记住的事情:
- 相同的复选框组合在那里失败。
- 其他所有组合都可以完美运行并返回预期结果
- 我正在本地使用下载的、未压缩的
jquery-3.3.1.js
. 因为源码参考的是JQuery 2.1.3,所以我也下载了解压后的jquery-2.1.3.js
文件。引用任一 JQuery 版本时,相同的复选框组合失败。 - 在我的本地机器上,源代码根本没有改变。
实际源代码中似乎存在一些缺陷,但似乎无法查明任何语法错误或缺少任何内容。
$("#doIt").on("click", function () {
var check = $('input:checked:checkbox[name=cc]');
var id = '';
$.each($(check), function (index) {
id += $(this).attr('id');
});
if ($(check).is(':checked')) {
switch (id) {
case 'c1':
console.log(id);
break;
case 'c2':
console.log(id);
break;
case 'c3':
console.log(id);
break;
case 'c4':
console.log(id);
break;
case 'c1c2':
console.log(id);
break;
case 'c1c3':
console.log(id);
break;
case 'c1c4':
console.log(id);
break;
case 'c2c3':
console.log(id);
break;
case 'c2c4':
console.log(id);
break;
case 'c3c4':
console.log(id);
break;
case 'c1c2c3':
console.log(id);
break;
case 'c1c2c4':
console.log(id);
break;
case 'c2c3c4':
console.log(id);
break;
case 'c1c2c3c4':
console.log(id);
break;
}
} else {
alert('Un Checked');
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="checkbox" id="c1" name="cc" />
<label for="c1"><span></span>Check Box 1</label>
<br />
<input type="checkbox" id="c2" name="cc" />
<label for="c2"><span></span>Check Box 2</label>
<br />
<input type="checkbox" id="c3" name="cc" />
<label for="c3"><span></span>Check Box 3</label>
<br />
<input type="checkbox" id="c4" name="cc" />
<label for="c4"><span></span>Check Box 4</label>
<br />
<button id="doIt" type="button">Click Me!</button>
解决方案
这与 JQuery 无关。您只是缺少case
与该组合匹配的分支。
您需要添加:case c1c3c4:
。
$("#doIt").on("click", function () {
var check = $("input[name='cc']:checked");
var id = '';
$.each($(check), function (index) {
id += $(this).attr('id');
});
if ($(check).is(':checked')) {
switch (id) {
case 'c1':
console.log(id);
break;
case 'c2':
console.log(id);
break;
case 'c3':
console.log(id);
break;
case 'c4':
console.log(id);
break;
case 'c1c2':
console.log(id);
break;
case 'c1c3':
console.log(id);
break;
case 'c1c4':
console.log(id);
break;
case 'c2c3':
console.log(id);
break;
case 'c2c4':
console.log(id);
break;
case 'c3c4':
console.log(id);
break;
case 'c1c2c3':
console.log(id);
break;
// You were missing this
case 'c1c3c4':
console.log(id);
break;
case 'c1c2c4':
console.log(id);
break;
case 'c2c3c4':
console.log(id);
break;
case 'c1c2c3c4':
console.log(id);
break;
}
} else {
alert('Un Checked');
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="checkbox" id="c1" name="cc" />
<label for="c1"><span></span>Check Box 1</label>
<br />
<input type="checkbox" id="c2" name="cc" />
<label for="c2"><span></span>Check Box 2</label>
<br />
<input type="checkbox" id="c3" name="cc" />
<label for="c3"><span></span>Check Box 3</label>
<br />
<input type="checkbox" id="c4" name="cc" />
<label for="c4"><span></span>Check Box 4</label>
<br />
<button id="doIt" type="button">Click Me!</button>
推荐阅读
- javascript - 如何检查集合中的继续课程?
- macos - docker:来自守护进程的错误响应:拨打 unix docker.raw.sock:连接:没有这样的文件或目录。苹果系统
- laravel - 如何在 docker 容器中重新启动 Laravel 队列工作者?
- javascript - 无效的正则表达式:无效的组说明符名称 - 在任何 iOS 设备上中断的正则表达式
- php - Laravel Vuejs 中的服务器端处理数据表
- python - 将最小值和最大值标记为阴影点?
- java - 将当前行与上一行进行比较。爪哇
- c++ - 您何时收到 GVSP 状态代码 0x800C :请求的数据包不再可用?
- ios - 为什么通过 bundleId API 查找不返回结果?
- c# - 使用泛型表达式简化类的创建