您好我创建了一个 javascript 函数来检查所选模块的数量是否大于给定值。因此,每次调用复选框时都会调用该函数,并且该函数会遍历所有复选框并计算总数以查看它是否更大。但问题是当用户选中复选框时,如果总积分大于值,我想将复选框设置为选中 = false。但我不知道要撤消哪个复选框。javascript中是否有任何撤消最后点击功能?
johnnaples
问问题
4899 次
6 回答
8
不是真的,但是您可以通过保存最后一个单击的框来轻松地伪造它。此代码可能无法逐字运行,但您明白了:
<script>
var last_checked_box;
function onBoxClicked( box ) {
if ( box.checked ) last_checked_box = box;
}
function undoLastBox() {
if ( last_checked_box ) last_checked_box.checked = false;
}
</script>
<input type="checkbox" id="box1" onClick="onBoxClicked(this)"/>
...
于 2009-03-11T12:48:46.930 回答
6
使用jQuery,您可以执行以下操作:
var MAX_CREDITS = 50; // just as an example
$("input[type=checkbox]").change(function (){
var totalCredits = 0;
$("input[type=checkbox]").each(function (){
// augment totalCredits accordingly to each checkbox.
});
if(totalCredits > MAX_CREDITS){
$(this).removeAttr("checked");
}
});
如果您以前从未使用过 jQuery,这肯定会让您的眼睛感到痛苦;但正如您所看到的,它非常强大,您的问题可以在几行内解决。我建议您学习并尝试一下;)
于 2009-03-11T12:49:21.000 回答
1
我知道这不是您要寻找的答案,但是当达到最大检查次数时禁用所有未选中的复选框会不会是更好的用户体验?
于 2009-03-11T12:46:38.090 回答
0
这是一个最小但功能齐全且无 jQuery 的解决方案:
<script>
function isBox(element) {
return element.form && element.form === document.forms[0] &&
element.nodeName.toLowerCase() === 'input' &&
element.type === 'checkbox';
}
function remaining(dR) {
var field = document.forms[0].elements[0],
value = +field.value;
if(dR) return field.value = value + dR;
else return value;
}
function listener(event) {
var box = (event && event.target) ||
(window.event && window.event.srcElement);
if(isBox(box)) {
if(box.checked) {
if(remaining() > 0)
remaining(-1);
else box.checked = false;
}
else remaining(+1);
}
}
if(document.addEventListener)
document.addEventListener('click', listener, false);
else if(document.attachEvent)
document.attachEvent('onclick', listener);
</script>
<form>
<p>remaining: <input type="text" readonly="readonly" value="2"></p>
<p><input type="checkbox" id="b1"><label for="b1">box1</label></p>
<p><input type="checkbox" id="b2"><label for="b2">box2</label></p>
<p><input type="checkbox" id="b3"><label for="b3">box3</label></p>
</form>
于 2009-03-11T13:49:39.013 回答
0
我不认为有,但你总是可以保存对最后一个复选框的引用,所以当你必须取消选中它时,你就在那里。
于 2009-03-11T12:47:39.663 回答
0
我建议测试是否已检查最大对象数,如果为真,则以相同的方法删除所有检查,或者将某个隐藏文本框的值设置为上次选中复选框的 id,以便您可以再次引用它.
于 2009-03-11T12:54:50.487 回答