【问题标题】:javascript that hides/shows element based on criteria not working with style.display = "none"基于标准隐藏/显示元素的 javascript 不适用于 style.display = "none"
【发布时间】:2021-02-24 12:17:56
【问题描述】:

我的 html 中有这段 javascript,它获取表单输入,将其放入一个函数并返回一个 json。然后我想根据这个 json 中的值隐藏或显示某些表单元素。

目前,除了更改我试图隐藏/显示的元素的 style.display 属性之外,我可以做所有这一切,我可以用 getElementbyId 找到它们没问题(已经用其他东西测试过)但是变化我做的风格似乎没有做任何事情。

正如您在下面看到的,我已经发出了一些警报以确保一切正常,并且它们似乎都符合我对该功能的需求。显示 style.display 的警报甚至与我尝试将其更改为的内容相匹配,但是即使它显示“none”,表单元素仍会显示。

<script type="text/javascript">
    let selected = document.getElementById('selection1');
    let optional_toggle = document.getElementById("optional_element");
    let button = document.getElementById("button")

     button.onclick = function() {
        choice1 = selected.value;

        fetch('/form_choice/' + choice1).then(function(response) {

            response.json().then(function(data) {

                if (data.show_optional === "True") {
                    optional_toggle.style.display = ""
                    window.alert("first part of if");
                    window.alert(optional_toggle.style.display);
                    window.alert(data.show_optional);
                }
                else {
                    optional_toggle.style.display = "none"
                    window.alert("second part of if");
                    window.alert(optional_toggle.style.display);
                    window.alert(data.show_optional);
                    console.log(optional_toggle);
                }
                }
            )
            }
        )
    }
</script>

编辑:我添加了 console.log 行,但控制台中似乎没有显示任何内容。 console log image

【问题讨论】:

  • 我认为条件 data.show_optional === "True" 始终为真,或者您的 optional_toggle 未加载,尝试控制台记录您的元素
  • @Spring 我尝试过切换位,但我认为第一部分并不总是正确的,因为警报确实显示了 if 的第一部分和第二部分之间的切换.您能否再解释一下您的意思:未加载 optional_toggle/控制台记录它,因为我是新手,不确定您的意思!谢谢
  • 表示代码是在dom加载之前执行的,你能把代码显示在控制台console.log(optional_toggle)
  • 哦,好吧,我只是想弄清楚如何使用我正在使用的 IDE 显示控制台日志,因为我似乎无法在浏览器或 python 控制台中看到日志
  • 您可以在浏览器中看到登录,只需输入“F12”并单击控制台TAB

标签: javascript html jquery css


【解决方案1】:

问题是页面在脚本执行后重新加载到它的原始状态,所以我通过在函数后面添加“; return false”来停止这个:

<script type="text/javascript">
    let selected = document.getElementById('selection1');
    let optional_toggle = document.getElementById("optional_element");
    let button = document.getElementById("button")

     button.onclick = function() {
        choice1 = selected.value;

        fetch('/form_choice/' + choice1).then(function(response) {

            response.json().then(function(data) {

                if (data.show_optional === "True") {
                    optional_toggle.style.display = ""
                    window.alert("first part of if");
                    window.alert(optional_toggle.style.display);
                    window.alert(data.show_optional);
                }
                else {
                    optional_toggle.style.display = "none"
                    window.alert("second part of if");
                    window.alert(optional_toggle.style.display);
                    window.alert(data.show_optional);
                    console.log(optional_toggle);
                }
                }
            )
            }
        ); return false
    }
</script>

【讨论】:

  • 您还可以使用此代码阻止按钮上的默认操作,无需返回button.onclick = function(e) { e.preventDefault(); ..... }
猜你喜欢
  • 2021-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-07
  • 2020-01-12
  • 1970-01-01
相关资源
最近更新 更多