2014-03-31 19 views
0

我不熟悉JavaScript。當有人通過onchange(field-name:「ordernumber」)更改輸入文本字段時,我到目前爲止所做的是隱藏我的表單的一部分(請參見下面的「備忘錄」)。隱藏元素與JS由於兩個條件

所以我用這個的Funktion:

<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> 

這工作得很好,但現在我想從一個下拉列表(選擇選項)添加另一個條件。換句話說:當您更改訂單號並選擇某個選項時,「備忘錄」應該消失。我嘗試了很多,但無法正常工作。這是我最新的嘗試:

function takeawayfield() 
{ dok=0; 
if (document.getElementById("ordernumber").changed == true && document.getElementById("system").value == "sys1") dok=1 
if (dok==0) 
{document.getElementById("Memo").style.display = "none";} 
else 
{document.getElementById("Memo").style.display = "inline";} 

兩件事情都沒有這一個正確的工作:當只有其中的一個條件是真實的它執行(雖然我以前& &),它似乎是unrelevant哪個選項從已選擇下拉菜單。現在它執行每個選項,但它只應執行「sys1」。

順便說一句:我添加onchange =「javascript:takeawayfield()」兩個受影響的表單元素(輸入文本和選擇選項)。我想這是正確的?

我在做什麼錯?

在此先感謝!

編輯:

這裏是HTML標籤:

<input type="text" name="ordernumber" id="ordernumber" value="<?php echo htmlspecialchars($ordernumber); ?>" onchange="javascript:takeawayfield()">

<select name="system" id="system" onchange="javascript:takeawayfield()"> <option value="sys1">System 1</option> <option value="sys2">System 2</option> <option value="sys3">System 3</option> </select>

+0

什麼是'.changed'?請同時顯示您的兩個字段的HTML標記。 – Bergi

+0

我不確定我是否明白你需要什麼,如果你有onchange事件,爲什麼你仍然試圖看看文本框值是否改變?你應該檢查一下實際上是否存在價值?順便說一句,我認爲沒有「改變」的東西。 – Esko

+0

@Bergi這裏是標籤:'」onchange =「javascript:takeawayfield() 「> ' 和 '<選擇name = 」系統「 ID = 」系統「 平變化= 」JavaScript的:takeawayfield()「> <選項值= 」SYS1「>系統1 <選項值=」 SYS2 「>系統2 <期權價值=」 SYS3" >系統3 「 – Felix

回答

0

試試這個:

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"; 
    } 
}; 

jsFiddle

+0

看起來不錯,但是每次我選擇另一個選項時,它會顯示並且不顯示「備忘錄」,每當我更改「訂單號」時。 我想要的是當「訂單號」發生變化時以及從下拉列表中選擇「sys1」時,「備忘錄」保持隱藏狀態。 – Felix

+0

你的意思是簡單的另一種方式?或者如果選擇「sys1」,**或**「ordernumber」被更改,應該隱藏「備忘錄」? – friedi

+0

不,在選擇「sys1」的時候應該隱藏「備忘錄」,並且「訂單號」被更改。 – Felix

0

如果您的下拉列表(選擇/選項)在選項標籤中有值,那麼下面的代碼應該工作正常。 (後用戶選擇)

  1. 的選擇,例如:

    <select id="system"> 
        <option value="sys1">system 1</option> 
        </select> 
    
  2. 您的代碼

    
        document.getElementById("system").value == "sys1" 
    
  3. 或者你改變你的代碼:

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

這就是我的想法。我認爲問題是連接兩個條件(是「sys1」選擇和「訂單號」更改?) – Felix

+0

哦,我明白了。如果document.getElementById(「ordernumber」)。changed爲false,則此行不會繼續。它不檢查選擇/選項值。所以也許你可以用「或」條件來嘗試。 – system7

+0

不,不幸的是,這並沒有解決問題。我認爲操作符'&&'意思是,與它有關的所有條件必須是真實的,實際上我需要的是什麼。 – Felix

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"; 
     } 
    } 
}; 

http://jsfiddle.net/je5a7/