2010-08-30 91 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