2014-03-02 59 views
0

有一個函數hideLabels應該保存所選標籤的當前值,然後在複選框取消選中時返回(當它被選中一次後)。控制檯說:"Uncaught TypeError: Cannot read property 'innerHTML' of null "但我仍然無法看到錯誤在哪裏。Uncaught TypeError:當取消選中複選框時,無法讀取屬性'innerHTML'爲空

<script> 

function hideLabels(labelname) { 

    var labelInitial=document.getElementById(labelname).innerHTML ; 
    if (document.f.test.checked==true) { 
     document.getElementById(labelname).innerHTML=""; 
    } else { 
     document.getElementById(labelname).innerHTML=labelInitial; 
    } }; 

function hideComments() { 

    hideLabels(label_1) ; 
    if (document.f.test.checked==true) { 
     document.f.s.style.display="none"; 
    } else { 
     document.f.s.style.display="inline"; 
    } }; 

</script> 

<FORM name=f > 

<label ID="label_1" for="s">Select please!</label> 

<SELECT NAME=s> 
    <OPTION>First Option</OPTION> 
    <OPTION>Second Option</OPTION> 
    <OPTION>Third Option</OPTION> 
</SELECT> 
<BR> 

<INPUT name="test" TYPE=checkbox VALUE="test" onChange="hideComments()";> 
<INPUT type=button value="Alert" onClick="alert(document.getElementById('label_1').innerHTML)";> 

</FORM> 
+0

嘗試用「真」,而不是真正的。這可能是問題所在。 –

+0

@AnkitZalani:不,不要說:http://jsfiddle.net/kimiliini/g96PM/ – user13500

回答

2

因爲該參數是作爲字符串傳遞的,所以必須用帶引號的參數包裝在hideLabels()函數中。

UPDATE:

我希望你只是想了解的基礎知識,因爲我不知道爲什麼你不也隱藏標籤爲相同<select>元素。或者將它們都包裝在一個div中,並且可以切換該div的可見性。這使你的工作變得簡單。

但是,這是你的工作方式,你應該得到初始的HTML只是當你改變,比它的工作。

這是您的方式DEMO

這是我將如何做到這一點,DEMO

<script> 
    function hideComments() { 
     var selectDiv = document.getElementById("toggleDiv"); 
     selectDiv.style.display = (selectDiv.style.display == "none") ? "block" : "none"; 
    }; 
</script> 
<form name="f"> 
    <div id="toggleDiv"> 
     <label ID="label_1" for="s">Select please!</label> 
     <select name="s"> 
      <option>First Option</option> 
      <option>Second Option</option> 
      <option>Third Option</option> 
     </select> 
    </div> 
    <br/> 
    <input name="test" type="checkbox" value="test" onchange="hideComments()" ;> 
    <input type="button" value="Alert" onclick="alert(document.getElementById('label_1').innerHTML)" ;> 
</form> 
+0

你真是我的救世主,謝謝先生! 它的工作!但是我有另一個問題。 由於某些原因,複選框未選中時,標籤的值不會返回。它不是應該保存在labelInitial變量中嗎? – user3370638

+0

@ user3370638,檢查我的更新答案。 – ocanal

相關問題