javascript - 即使单击父 div,也可以使动态生成的复选框单击工作
问题描述
我在动态生成的行中动态生成了复选框。我将委托事件('click')侦听器附加到整行。
一切都很好 - 我通过单击行中的任何位置来切换复选框状态,除了一件小事 - 单击复选框本身不会切换其状态。
下面是我的示例代码。有任何想法吗?
//Generate dynamically div row encompassing checkbox and label
$('#wraper').append(`
<div id="row">
<label>This is the checkbox</label>
<input type="checkbox"></input>
</div>
<br>
<span class="msg"></span>
`);
//Attach delegated event listener to entire row
$('#wraper').on('click', '#row', function(){
//Toggle checked attribute
$('#row [type="checkbox"]').get(0).checked = !$('#row [type="checkbox"]').get(0).checked;
//Display checked status after click
$('#wraper .msg').text(`Checkbox status is ${$('#row [type="checkbox"]').get(0).checked}`);
});
<!doctype html>
<html>
<head>
<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
</head>
<body>
<div id="wraper"></div>
</body>
</html>
解决方案
如评论中所述,从代码中删除click
逻辑。它会立即覆盖默认的 HTML 功能。如果您的意图是即使单击标签也检查复选框,您可以使用该for
属性并指向复选框的id
:
更新:如果您想在父级的任何地方选中复选框div
,则向父级添加一个click
处理程序。如果点击目标不是 a checkbox
,则强制选中复选框。如果目标是 a checkbox
,不要做任何事情。
$('#wraper').append(`
<div id="row">
<label>This is the checkbox</label>
<input type="checkbox"></input>
</div>
<br>
<span class="msg"></span>
`);
$('#wraper').on('click', '#row', function(e) {
/* If the clicked element is not a checkbox,
then force the check via jquery
*/
if (e.target.type !== 'checkbox') {
$(this).find('input').prop('checked', !$(this).find('input').prop('checked'))
}
// Display checked status after click
$('#wraper .msg').text(`Checkbox status is ${$('#row [type="checkbox"]').get(0).checked}`);
});
$("#checkbox-test").change(function() {
$('#wraper .msg').text(`Checkbox status is ${this.checked}`);
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="wraper"></div>
推荐阅读
- python - 有什么方法可以整理或解析excel中的杂乱数据
- java - 当程序登录到控制台时会发生什么?
- mysql-workbench - 我需要帮助理解 MySQL Workbench 中 BACKUP 的语法
- php - 如何修复:注意:当我尝试基于数组压缩图像时,数组到字符串的转换错误
- laravel - laravel 中间件中经过身份验证的用户为空
- xml - 从 libreoffice calc 导出到 xml 时如何保留换行符?
- javascript - 有没有办法制作“for循环的for循环”?
- javascript - 有没有办法在不太详细的日志级别使用 console.time?
- rsync - 如何为 rsync 源和目标定义单独的用户名/密码?
- scala - Spark 流作业以 Json 格式写入 Hdfs