2011-07-12 65 views
0

不能得到這個工作。第一次使用傳遞給函數的變量。取消選中單選按鈕應禁用表單域,反之亦然。 lineid變量區分這個收音機/文本輸入對與其他10個。如何啓用/禁用單選按鈕交互的文本字段?

我的代碼:

<script type="text/javascript"> 
function disablefield(lineid){ 
if (document.getElementById(lineid).checked == true){ 
document.dupedit.lineid.disabled = false; 
} else { 
document.dupedit.lineid.disabled = true; 
} 
} 
</script> 

我的HTML的子集。

+0

以整數開頭的ID無效。不知道它是否導致你的問題,但你可能想看看。 – calumbrodie

+0

@kissmyface - 不是HTML5:http://mathiasbynens.be/notes/html5-id-class –

+0

@詹姆斯當然,你是正確的:-)我仍然這樣做雖然出於習慣。看起來像這樣的id不(通常)太過於語義。我可能會使用數據屬性。 – calumbrodie

回答

1

您需要將字符串傳遞到您的disablefield功能,所以加上引號值當你通過它像:

<input onclick="disablefield('2671997')" />

這是因爲document.getElementById需要一個字符串,不是一個整數。

其次,要啓用/禁用該字段,您需要使用disabled = true;而不是= 'disabled'

document.dupedit.lineid與名稱「lineid」,這並不在你的形式存在尋找一個一個領域。我會建議給該字段一個id並再次使用document.getElementById

如果要繼續使用name屬性,則必須改爲使用document.getElementsByName。這將返回匹配的元素(因爲多個元素可以共享相同的名稱)的數組,但如果你的代碼,你知道有問題的元素是唯一一個使用該名稱,你可以這樣做:

document.getElementsByName(lineid)[0].disabled = true; 

你可以看到一個工作版本(我認爲這就是你想要的)here。而here是使用getElementsByName的版本。

+0

謝謝 - 試過了,加上更正了下面的缺失大括號,但它仍然不起作用。更新代碼。對不起 - 只是看到你的編輯,並通過他們的工作。 – Dan

+0

嗯,我認爲在名稱中使用lineid會將其替換爲傳入該函數的值。例如。 PHP語言中的'document.dupedit。$ lineid'?無論如何要做到這一點? – Dan

+0

@丹 - 查看我最近的編輯。但我肯定會建議使用'id'而不是'name'。 –

1

您在功能缺少一個右括號:

function disablefield(lineid){ 
if (document.getElementById(lineid).checked == true){ 
document.dupedit.lineid='enabled'; 
}else{ 
document.dupedit.lineid='disabled'; 
} 
} //<-- here 

而且,我可以建議你通過this的功能。那麼你不必撥打getElementById

<input onclick='disablefield(this)' type..... 

function disablefield(obj){ 
    if (obj.checked == true){ 
     document.dupedit.lineid='enabled'; 
    }else{ 
     document.dupedit.lineid='disabled'; 
    } 
} 
1

我認爲你需要的是重新考慮代碼。

  • 請勿在複選框上使用ID。更好的是ID移動到要禁用/啓用,並檢查該字段是否被禁用/啓用,而不是複選框本身

  • 使用更清潔的JS文本字段。

請看看the jsFiddle,我已經編譯好了。這是否符合你的期望?丹?

相關問題