Javascript 按钮在第一次单击时不起作用
Javascript 按钮在第一次单击时不起作用,javascript,html,button,dom-events,Javascript,Html,Button,Dom Events,函数showCheckbox(){ var node_list=document.getElementsByClassName('check'); 对于(变量i=0;i
函数showCheckbox(){
var node_list=document.getElementsByClassName('check');
对于(变量i=0;i
输入[类型=复选框]{
显示:无;
位置:相对位置;
}
Ψάρεμα
Γήπεδο
我认为正在发生的事情是,在第一次单击时会调用您的单击处理程序,但是您的if
测试没有按照您期望的方式工作。这一行:
if(node_list[i].style.display == 'none')
…正在测试元素是否具有内联样式集。它没有:它是通过一个CSS规则隐藏的,该规则适用于所有这些输入。因此,您的else
案例将执行,.display
设置为'none'
。然后在下一次单击时,if
按预期工作,并将.display
更改为'block'
如果您实际调试函数一点,您可以自己看到这一点,以查看它是否被调用,并测试该属性的值。display
属性-正如您在这里看到的:(注意:我不建议alert()
s用于调试)
检查由样式表规则设置的当前可见性有点棘手,因为它不能在浏览器之间一致地工作。您可能需要测试是否存在.currentStyle
,并考虑当前浏览器可能支持的任何一种。请看另一个问题,了解更多信息
但在您的情况下,如果您知道复选框一开始是隐藏的,您可以简单地反转if/else:
if(node_list[i].style.display == 'block') {
node_list[i].style.display = 'none';
} else {
node_list[i].style.display = 'block';
}
.display
一开始不会是'block'
,因此将执行else并显示元素
演示:我认为正在发生的是,您的单击处理程序在第一次单击时被调用,但是您的
if
测试没有按照您期望的方式工作。这一行:
if(node_list[i].style.display == 'none')
…正在测试元素是否具有内联样式集。它没有:它是通过一个CSS规则隐藏的,该规则适用于所有这些输入。因此,您的else
案例将执行,.display
设置为'none'
。然后在下一次单击时,if
按预期工作,并将.display
更改为'block'
如果您实际调试函数一点,您可以自己看到这一点,以查看它是否被调用,并测试该属性的值。display
属性-正如您在这里看到的:(注意:我不建议alert()
s用于调试)
检查由样式表规则设置的当前可见性有点棘手,因为它不能在浏览器之间一致地工作。您可能需要测试是否存在.currentStyle
,并考虑当前浏览器可能支持的任何一种。请看另一个问题,了解更多信息
但在您的情况下,如果您知道复选框一开始是隐藏的,您可以简单地反转if/else:
if(node_list[i].style.display == 'block') {
node_list[i].style.display = 'none';
} else {
node_list[i].style.display = 'block';
}
.display
一开始不会是'block'
,因此将执行else并显示元素
演示:原因很简单:
当您获得“style”属性时,它表示该元素的内联样式。第一次单击时,“显示”没有内联样式,
所以else fork激发并将“display”的内联样式设置为“none”
你可以做的是下一步
您的代码很脆弱,很容易被破坏。我建议您在css和javascript之间创建一个清晰的关注点分离 另外,您对
check
类的使用有两个方面:选择元素并隐藏它们。这两件事最好不要相互耦合
更改元素类非常简单,如下所示:
node_list[i].classList.toggle('check-hidden');
您需要为实际隐藏的复选框创建一个新的css类
函数showCheckbox(){
var node_list=document.getElementsByClassName('check');
对于(变量i=0;i
。检查{
位置:相对位置;
}
.检查隐藏的{
显示:无;
}
Ψάρεμα
Γήπεδο
您的代码很脆弱,很容易损坏。我建议您在css和javascript之间创建一个清晰的关注点分离
另外,您对check
类的使用有两个方面:选择元素并隐藏它们。这两件事最好不要相互耦合
更改元素类非常简单,如下所示:
node_list[i].classList.toggle('check-hidden');
您需要为实际隐藏的复选框创建一个新的css类
函数showCheckbox(){
var node_list=document.getElementsByClassName('check');
对于(变量i=0;i
。检查{
po