【发布时间】:2017-01-06 23:31:01
【问题描述】:
这个问题的 tl:dr 版本很简单。我有一组复选框,并希望将那些已更改状态的复选框标记为未选中,未选中为选中。下面是我解决这个问题的尝试。我们使用的不是 jQuery,而是普通的 JavaScript。
我有一个应用程序,它显示一个表格,其中显示了数据库中活动或非活动项目的列表。活动状态会显示一个复选框,如果项目处于活动状态,则选中该复选框,如果项目处于非活动状态,则取消选中该复选框。
然后,应用程序的用户将进行更改,取消选中复选框并选中未选中的复选框以将项目的状态更改为他想要的状态,然后点击更新按钮将这些更改保存到数据库。
我认为向用户指出他更改了哪些项目会很有帮助。
然后,我将每个复选框放在一个 div 中,该 div 运行一个函数,该函数将单元格背景更改为不同的颜色,以标记那些与原来不同的项目。如果他们直接点击复选框,那很好,颜色和检查状态都会按预期更改,但如果您在框外单击,但仍在表格单元格内,颜色会更改,但检查状态不会更改。
所以,我在更改颜色函数中添加了一些代码,使其也可以切换复选框。如果他们在复选框外单击,但仍位于单元格内,则此方法效果很好。但是,如果他们在复选框上单击右键,它会同时运行颜色更改功能,即更改框状态和颜色,然后更改单击复选框的默认状态。这会导致检查状态恢复到原来的状态。
问题是,我怎样才能只让其中一个运行?有没有我不知道的标准方法?也许,我不应该使用复选框?
提前致谢
下面是函数:
function toggleCheckboxBackground(clickedItem){
if(clickedItem.style.background == 'red'){
clickedItem.style.background = '';
} else {
clickedItem.style.background = 'red';
}
var cboxes = clickedItem.getElementsByTagName('input');
if(cboxes[0].type === 'checkbox'){
if(cboxes[0].checked){
cboxes[0].checked = false;
}
else {
cboxes[0].checked = true;
}
}
}
【问题讨论】:
-
您可以改为静态指示初始值;不那么动态,但涉及的编码更少。
-
那么,您的建议是添加另一列的状态(活动/非活动),然后选中该框以更改它?我可以看到它在功能上是如何工作的,但我认为它对用户来说可能不够直观。
-
类似的东西。例如,我有一个单选按钮表,其中所有最初选中的按钮都有深蓝色背景,可点击的按钮有浅蓝色,不可点击的有红色。
标签: javascript checkbox