將您的代碼更改爲此,以正確聲明本地變量fs
一次。然後,您可以可靠地在代碼的末尾測試以確定它是否已設置。以前的代碼可能會因變量提升而起作用,但它不是推薦的編碼方式。一個變量的作用域是它在聲明的功能。
function toggleDeliveryOption(source) {
var fs = null;
if(source.toLowerCase() === "maildeliveryoption")
{
fs = document.getElementById("mailDeliveryOptionFS");
}
else if(source.toLowerCase() === "faxdeliveryoption")
{
fs = document.getElementById("faxdeliveryoptionFS");
}
else if(source.toLowerCase() === "emaildeliveryoption")
{
fs = document.getElementById("emaildeliveryoptionFS");
}
if (fs)
{
if (fs.style.display == "none") {
fs.style.display = "block";
} else {
fs.style.display = "none";
}
}
}
的其他潛在這裏小問題,就是fs.style.display
可能不會被預先設置爲閱讀風格變量這種方式只返回明確的內嵌樣式的HTML(它不返回事情通過CSS設置)。如果您想知道顯示設置的實際狀態,則必須使用包含CSS設置的計算樣式。在windows中獲得計算樣式是不同的,因此需要多行代碼才能完成。這是我使用像YUI或jQuery這樣的框架的原因之一,因爲它爲我處理所有這些跨瀏覽器混亂。
順便說一句,你可以簡化代碼像這樣的很多:
function toggleDeliveryOption(source) {
var fs = document.getElementById(source);
if (fs) {
if (fs.style.display == "none") {
fs.style.display = "block";
} else {
fs.style.display = "none";
}
}
}
爲了使這個簡單的版本的工作,只是通過期權的ID切換:
toggleDeliveryOption("mailDeliveryOptionFS");
如果你想實際的顯示狀態包括CSS設置,那麼你需要使用這個:
// add IE compatibility function for getComputedStyle
if (!window.getComputedStyle) {
window.getComputedStyle = function(el, pseudo) {
this.el = el;
this.getPropertyValue = function(prop) {
var re = /(\-([a-z]){1})/g;
if (prop == 'float') prop = 'styleFloat';
if (re.test(prop)) {
prop = prop.replace(re, function() {
return arguments[2].toUpperCase();
});
}
return el.currentStyle[prop] ? el.currentStyle[prop] : null;
}
return this;
}
}
function toggleDeliveryOption(source) {
var fs = document.getElementById(source);
if (fs) {
var style = getComputedStyle(fs, null);
if (style.display == "none") {
fs.style.display = "block";
} else {
fs.style.display = "none";
}
}
}
這應該不是問題...源代碼如何設置? –
@Joseph源是基於點擊事件複選框 郵件 –
你可以顯示HTML,因爲它將需要?我相信你可能在JavaScript代碼中拼錯了你的ID。 ID區分大小寫。 'mailDeliveryOptionFS'在其他兩個不是的情況下是駱駝式的。 –