Javascript 由于两个条件,使用JS隐藏元素

Javascript 由于两个条件,使用JS隐藏元素,javascript,function,if-statement,hide,Javascript,Function,If Statement,Hide,我对JavaScript不太熟悉。到目前为止,我所做的是隐藏我表单的一部分,见下:Memo,当有人通过onchange字段名:ordernumber更改输入文本字段时 因此,我使用这个函数: <script language="JavaScript" type="text/javascript"> function takeawayfield() { dok=0; if (document.getElementById("ordernumber").changed == true

我对JavaScript不太熟悉。到目前为止,我所做的是隐藏我表单的一部分,见下:Memo,当有人通过onchange字段名:ordernumber更改输入文本字段时

因此,我使用这个函数:

<script language="JavaScript" type="text/javascript">
function takeawayfield()
{   dok=0;
if (document.getElementById("ordernumber").changed == true) dok=1
if (dok==0)
{document.getElementById("Memo").style.display = "none";}
else
{document.getElementById("Meno").style.display = "inline";}
}
</script>
有两件事不适合这个选项:当只有一个条件为真时,它会执行,尽管我使用了&&并且它似乎与从下拉列表中选择哪个选项无关。现在它对每个选项都执行,但它应该只对sys1执行

顺便说一句:我将onchange=javascript:takeawayfield添加到受影响的表单元素input text和select选项中。我想是这样吧

我做错了什么

提前谢谢

编辑:

以下是html标记:

试试这个:

var dok = 0,
    initialValue = "",
    ordernumber = null,
    system = null,
    memo = null;

window.onload = function() {
    // get dom objects
    ordernumber = document.getElementById("ordernumber");
    system = document.getElementById("system");
    memo = document.getElementById("Memo");

    // set initial value
    initialValue = ordernumber.value;
};

function takeawayfield() {
    if (ordernumber.value != initialValue && system.value == "sys1") {
        dok = 0;
        memo.style.display = "none";
    } else {
        dok = 1;
        memo.style.display = "inline";
    }
};

如果您的下拉选择/选项在选项标签中有值,那么下面的代码应该可以正常工作。在用户选择

选择以下选项,例如:

  <select id="system">
     <option value="sys1">system 1</option>
  </select>
或者更改代码:


    if (document.getElementById("ordernumber").changed == true) dok=1;
    else dok=0;
    if (document.getElementById("system").value == "sys1") dok=1
    else dok=0;

如果您想在页面加载后对用户的更改做出反应,可以监听输入框和下拉列表的keyup事件

下面是一个例子:

window.onload = function() {
    document.getElementById("ordernumber").addEventListener('keyup', takeawayfield, false);
    document.getElementById("system").addEventListener('change', takeawayfield, false);

    function takeawayfield()
    {   
        if (document.getElementById("system").value == "sys1") {
            toggleMemo(false);
        }
        else {
            toggleMemo(true);
        }
    }

    function toggleMemo(show) {
        var memo = document.getElementById("Memo");
        if (show) {
            memo.style.display = "inline";
        }
        else {
            memo.style.display = "none";
        }
    }
};

换了什么?请同时显示这两个字段的html标记。我不确定我是否理解您需要什么,如果您有onchange事件,为什么还要尝试查看textbox值是否已更改?您是否应该检查字段中是否确实有值?顺便说一句,我认为没有什么东西是改变了的。@Bergi这是标签:'@Felix:请把它们写进你的问题中,你应该知道我也是这么想的。我想问题是连接这两个条件,选择了sys1,订单号改变了吗?哦,我明白了。如果document.getElementByIdordernumber.changed为false,则此行不继续。它不会检查选择/选项值。所以,也许你可以试着用它或条件。不,不幸的是,这并不能解决问题。我认为运算符“&&”的意思是,与它相关的所有条件都必须是真的,这才是我真正需要的。我刷新了我的解决方案。你试过这个吗?如果document.getElementByIdordernumber.changed==true-dok=1;else-dok=0;如果document.getElementByIdsystem.value==sys1 dok=1,则为else dok=0;看起来不错,但每次我选择其他选项和更改订单号时,都会显示并取消显示备忘录。我想要的是,当ordernumber被更改并且从下拉列表中选择sys1时,Memo保持隐藏。你的意思是简单吗?或者,如果选择了sys1或更改了订单号,便笺是否应该隐藏?否,便笺应该在选择sys1和更改订单号时隐藏。好的,然后您可以签出我的版本。我已经更新了。这很好用!这将需要一些时间来理解这个语法,但无论如何。。。谢谢!

    if (document.getElementById("ordernumber").changed == true) dok=1;
    else dok=0;
    if (document.getElementById("system").value == "sys1") dok=1
    else dok=0;
window.onload = function() {
    document.getElementById("ordernumber").addEventListener('keyup', takeawayfield, false);
    document.getElementById("system").addEventListener('change', takeawayfield, false);

    function takeawayfield()
    {   
        if (document.getElementById("system").value == "sys1") {
            toggleMemo(false);
        }
        else {
            toggleMemo(true);
        }
    }

    function toggleMemo(show) {
        var memo = document.getElementById("Memo");
        if (show) {
            memo.style.display = "inline";
        }
        else {
            memo.style.display = "none";
        }
    }
};