2010-08-30 80 views
0

我得到了「新用戶表單」。有三個不同的層次clearence:Javascript無法隱藏一些DIV

  • 客戶
  • clientContact
  • clientRepresentative

還有一些領域,如NEWMAIL,newPostalCode等

下面是我的代碼我用來顯示一個元素:

function doShow(obj) { 
        document.getElementById(obj).style.display = ''; 
       } 

,我使用隱藏的元素代碼:

function doHide(obj) { 
        document.getElementById(obj).style.display = 'none'; 
       } 

它適用於小數據塊。創建用戶時,將指定clearence級別,如果它是clientRepresentative,則顯示相應的字段。 例如,客戶端只有一個電子郵件地址,clientRepresentative有兩個電子郵件地址,clientContact有三個。

但是這個不工作!。 如果我選擇的客戶端,有一個電子郵件,正如計劃,但如果我選擇clientContact,然後切換到clientRep代表冗餘字段(電子郵件3)是不被隱藏

我相信這是一個JavaScript問題,請幫助我,因爲我的憤怒程度達到了天花板。

編輯: 我忘了粘貼功能用來顯示/隱藏項目。

if (clearenceLevel != "Chose...") { 
         if (clearenceLevel == "client") { 

          doShow("newMail"); 
          doHide("newMail2"); 
          doHide("newMail3"); 
          doShow("newNip"); 
          doShow("newRegon"); 
          doShow("newStreet"); 
          doHide("newHeadquarters"); 
          doShow("newAddress"); 
          doShow("newPostalCode"); 
          doShow("kptekst"); 
          doShow("newCity"); 
          doShow("newAccount"); 
          doShow("newState"); 
          doHide("newStatus"); 
          doHide("newPassword"); 
         } else if (clearenceLevel == "clientRepresentative") { 

          doShow("newMail"); 
          doShow("newMail2"); 
          doHide("newStatus"); 
          doHide("newMail3"); 
          doHide("newNip"); 
          doHide("newRegon"); 
          doHide("newStreet"); 
          doHide("newHeadquarters"); 
          doHide("newAddress"); 
          doHide("newPostalCode"); 
          doHide("newCity"); 
          doHide("newAccount"); 
          doHide("newState"); 
          doHide("kptekst"); 
          doShow("newPassword"); 

         } else if (clearenceLevel == "clientContact") { 

          doShow("newMail"); 
          doShow("newMail2"); 
          doShow("newMail3"); 
          doHide("newNip"); 
          doHide("newRegon"); 
          doHide("newStatus"); 
          doHide("newStreet"); 
          doHide("newHeadquarters"); 
          doHide("newAddress"); 
          doHide("newPostalCode"); 
          doHide("newCity"); 
          doHide("newAccount"); 
          doHide("newState"); 
          doHide("kptekst"); 
          doHide("newPassword"); 
         } 
        } 
+0

你在傳遞給doShow和doHide形式?它看起來應該是一個字符串(元素ID),但參數被稱爲「obj」。如果您確實傳入了DOM元素對象,那麼代碼將無法工作。 – Douglas 2010-08-30 11:22:58

+0

您是否100%確定每個ID在文檔中只存在一次? – 2010-08-30 11:24:02

+1

你確實需要一些適當的工具來調試這些東西,比如Firebug(在Firefox上)或者Fiddler(IE)。 – tdammers 2010-08-30 11:24:30

回答

1

不是您的問題的直接答案,而是關於如何改善您的操作方式的建議。而不必列出每個屬性來顯示和隱藏每個用戶等級的,做這樣的事情:

<input type="text" name="email" class="client representative contact"> 
<input type="text" name="ssn" class="representative"> 

然後,當用戶水平的變化隱藏一切,然後取消隱藏具有正確級別的一切。因此,在我的示例中,「電子郵件」可用於「客戶」「代表」和「聯繫人」。因此,如果他們切換到任何這些級別,該字段將顯示,但「ssn」僅適用於「代表」,因此不會顯示給其他任何人。

這樣做的好處是能夠輕鬆地添加一個全新的項目而不需要需要修改Javascript,只有HTML。

if (clearenceLevel != "Chose...") { 
        hideAll(); 
        if (clearenceLevel == "client") { 
         doShow("client"); 
        } else if (clearenceLevel == "clientRepresentative") { 
         doShow("representative"); 
        } else if (clearenceLevel == "clientContact") { 
         doShow("contact"); 
        } 
} 
+0

好主意,我會採用我的代碼這種方式。感謝您的建議。 – TBH 2010-08-30 12:02:08

1

您可能在代碼中犯了錯誤。

else if(clearenceLevel ==「clientRepresentative」){
doShow(「newMail」);
doShow(「newMail2」);
doHide(「newStatus」);
doShow(「newMail3」); //不應該是doHide()?
//等

從你的信息我瞭解,你要隱藏的電子mail3而切換到clientRepresentative,但在上述doShow()的代碼被執行,而不是doHide()。

+0

你是對的,它應該是doHide(),但它不會改變任何東西,因爲當clientRepresentative被選擇時,newMail3字段仍然可見;有趣的是,如果我選擇clientRepresentative,然後客戶端,冗餘字段正在隱藏。 – TBH 2010-08-30 11:34:16

0

謝謝您的回答, 我張貼用來發送數據

echo '<div id="newMail"><br><font color="red">*</font>email: <input type="text" name="newMail" value="' . $_POST['newMail'] . '" /> </div>'; 
    echo '<div id="newMail2"><br>email 2: <input type="text" name="newMail2" value="' . $_POST['newMail2'] . '" /> </div>'; 
    echo '<div id="newMail3"><br>email 3: <input type="text" name="newMail3" value="' . $_POST['newMail3'] . '" /> </div>'; 
    echo '<div id="newNip"><br>nip: <input type="text" maxlength="15" name="newNip" value="' . $_GET['nip'] . '"/> </div>'; 
    echo '<div id="newRegon"><br>regon: <input type="text" name="newRegon" value="' . $_POST['newRegon'] . '" /> </div>'; 
    echo '<div id="newStreet"><br>Street: <input type="text" name="newStreet" value="' . $_POST['newStreet'] . '" /> </div>'; 
    echo '<div id="newHeadquarters"><br>Headquarters: <select name="newHeadquarters"> '; 
+1

您不會在此代碼中關閉您的最後一個div。這是一種SO錯誤還是疏忽? – Tommy 2010-08-30 11:48:29

+0

這只是一個疏忽,我隱藏的領域不存在。 Javascript代碼崩潰了。謝謝你的努力。 – TBH 2010-08-30 12:03:12