JS click() 事件 - 奇怪的 beheavyor Chrome/IE8 如果我点击框与标签

JS click() event - Odd beheavior Chrome/IE8 if i click on the box vs the label

提问人:spunka 提问时间:2/6/2023 最后编辑:spunka 更新时间:2/6/2023 访问量:59

问:

我正在使用旧的网站系统,我在调试这个 beheavior 时遇到了问题,我不知道为什么会发生这种情况(这是遗留代码,所以我无法进行任何更改,只是一些补丁)

编辑:这个系统可以在IE8上运行,但现在他们正在改变浏览器,它需要在现代浏览器上运行,或者至少在chromium上运行

我有一个复选框,在页面加载时被选中。如果我点击它,它将触发 onclick() 事件,并且它内部再次有一个 click()[2] 事件。

铬:

如果我单击复选框(框),它不会让您取消选中它,因为 click()[2] 事件会触发并再次检查它

但是如果我单击 de 标签“TEST Check”,它可以让您将其更改为未选中,因为 click()[2] 事件未触发,它会跳过它 为什么只适用于标签?

IE浏览器 8:

在IE上,始终跳过click()[2],这样它的工作方式就像我按下了标签con Chrome一样

是的,这段代码很糟糕,但我只是想知道为什么标签跳过 click() 事件

在这里试试看: https://codepen.io/spuncko/pen/LYBavzx

<!DOCTYPE html>
<html>
<body>

<label>
    <input type="checkbox" name="CHK_NH_30" id="CHK_NH_30" onClick="changeHidden(this.checked, document.getElementById('HD_CHECK')); pressClick();" /> TEST Check
    <input type="hidden"          name="HD_CHECK"              id="HD_CHECK"                value="N"/>
</label>

</body>
<script>
    pressClick();
    
    function changeHidden(checked, hdobj){
        if (checked){
            hdobj.value = "Y";
        }else{
            hdobj.value = "N";
        }
    }
    function pressClick(){
        console.log("pressClick function");     
        
        if (document.getElementById("HD_CHECK").value == "N") {
            document.getElementById("CHK_NH_30").disabled = false;
            document.getElementById("CHK_NH_30").click(); //click[2]
        }
    }
</script>
</html>

我希望标签也会触发 click() 事件并且不会跳过它 所以盒子和标签的工作方式是一样的(即使不是IE8,但至少是一致的)

JavaScript Google-chrome Internet-Explorer 复选框 onclick

评论

1赞 Yogi 2/6/2023
请澄清。您有为 IE8 编写的旧代码,并且想要在现代浏览器中运行?
0赞 spunka 2/6/2023
@Yogi 是的,它现在需要在现代浏览器上运行。我编辑了这篇文章。 谢谢
0赞 epascarello 2/6/2023
该代码应该做什么?将其设置为“N”,它应该取消禁用该复选框,然后再次单击该复选框以使其成为“Y”????
1赞 epascarello 2/7/2023
stackoverflow.com/questions/24501497/......
3赞 Yogi 2/7/2023
您可以在没有任何 JavaScript 的情况下通过简单地添加 css 规则来解决问题: label input { pointer-events: none;这样,只有标签包装器会触发点击事件。

答: 暂无答案