您可以保持在onclick
属性中,但它通常更易于管理分解成单独的脚本:
<span>
<input type="checkbox" tabindex="12" value="1" name="salgsvilkar" id="Checkbox2"/>
<label for="Checkbox2">Salgs- og leveringsvilkår er lest og akseptert</label>
</span>
<script type="text/javascript">
document.getElementById('Checkbox2').onclick= function() {
var s= this.parentNode.style;
s.backgroundColor='#E5F7C7';
s.border='solid blue 1px;';
};
</script>
我使用this.parentNode
来获取围绕被点击的对象的包装范围,以消除对额外ID的需要。
请注意,由于这只能检测点击,所以如果再次单击以取消选中该复选框,则范围仍将保持突出显示。
此外,除非您实际上正在编写XHTML文档,否则不要使用XHTML />
自闭格式。未引用的属性值(如tabindex=12
)在XHTML中无效。
回复:发表评论:
但进一步的,我能做些什么来恢复它,如果它未点击?
为了便于处理回复,我会去班:
<style type="text/css">
.highlight {
background: #E5F7C7;
border: solid blue 1px;
}
</style>
...same markup...
<script type="text/javascript">
document.getElementById('Checkbox2').onclick= function() {
var that= this;
setTimeout(function() {
that.parentNode.className= that.checked? 'highlight' : '';
}, 0);
};
</script>
只删除类时this
不是checked
将风格重置为它以前,而不必记住旧的背景和边界值。
什么是setTimeout
?那么,当onclick
事件发生时,您刚刚单击了该复选框,但它尚未切换其检查。事实上,如果你return false
你会防止复选框被改变。因此,我们告诉浏览器在点击复选框的默认操作发生后,回到tic中。 (因此,我们必须保持的this
值,它会通过一个新的,无用的this
在超时功能被隐藏。)
onclick
是真的错了事件在这里使用,它应该是onchange
。但是,您通常会看到onclick
,因为在IE中存在一个错误,在该位置它不会触发onchange
,直到您将该复选框放开。
谢谢,我使用的是xhtml,从之前的一个项目中复制了一些以前的复选框代码。将删除它。它是一个接受条款框,因此只需点击一次即可。但进一步说,如果它没有点击,我可以做些什么来恢复它? – Kyle 2010-04-20 09:53:54
在函数中添加 如果(this.checked){ /*设置样式* /} 其他{ /*删除样式* /} – RoToRa 2010-04-20 10:22:29
这是一个惊人的完整的答案,即使我不支持JS心灵的理解,非常感谢你! – Kyle 2010-04-20 12:03:35