2013-05-09 85 views
0

我需要通過在外部JS文件中放置JavaScript代碼來使「只讀」文本字段。我不能直接修改HTML,因爲頁面位於遠程服務器上。但我可以通過在位於我自己的主機上的外部JS中添加代碼來進行交互。使用getElementByName進行只讀操作嗎?

在HTML是這樣的:

<form id="newunitform" class="left" action="page.php" style="width:600px" method="post"> 
<fieldset> 
<ul> 
<li> 
<label for="add"> 
<input type="text" value="" name="add"> 
<input type="hidden" value="" name="remove"> 
<input type="hidden" value="105" name="resource_id"> 
<input type="hidden" value="" name="editid"> 
</li> 
</ul> 
<label for="submit"> </label> 
<input class="button" type="submit" value="Add name" name="submit"> 
</fieldset> 
</form> 

我嘗試了幾種組合,例如這樣的:

document.getElementByName('add').readOnly=true; 

或該:

var add = document.getElementByName('add'); 
add.readOnly = true; 

或該:

document.getElementById('newunitform'); 
document.getElementByName('add').readOnly=true; 

但沒有工作。

+3

它實際上'getElementsByName'。注意**'''**。它返回多個元素。您需要循環並設置'readOnly'屬性。 – 2013-05-09 19:48:25

+0

該死的你對,我沒有注意到「s」...但是我測試了所有解決方案,但都沒有成功。 – dotcom22 2013-05-09 20:10:15

回答

0

火箭危險品在你的問題的意見建議,你應該使用

document.getElementsByName('add')[0].readOnly=true; 
+0

測試但不工作.. – dotcom22 2013-05-09 20:10:44

0
document.getElementsByName('name') 

返回數組。您需要使用括號或.item()指向您的元素。 我建議你使用這一個,在我看來,這是一個更好的解決方案:

var newUnitForm = document.getElementById('newunitform'); 
newUnitForm.add.readOnly = true; //or newUnitForm['add'], it's the same 
+0

我也測試過這個,但不工作.. – dotcom22 2013-05-09 20:11:10

+0

http://jsfiddle.net/Cm5yk/ 只要看看這個,你可以看到它的作品。請更好地解釋您的問題,以便我們能夠幫助您。 – 2013-05-09 20:14:59

+0

我測試了你的代碼,但是也不能工作。即使我在Jsfiddle上看到了這個工作也很奇怪......這很奇怪,因爲我沒有問題地使用其他一些代碼來應用「只讀」其他「字段」(但這些字段有一個ID,所以我總是使用document.getElementById)。也許我受限於如何在特定情況下使用JS ...我想我必須看到遠程軟件的提供者...... – dotcom22 2013-05-09 20:23:34

0

如果你知道只有一個名爲「添加」的元素,你可以嘗試這樣的事:

var elem = document.getElementsByName("add")[0]; 
elem.setAttribute("readonly", "true"); // or elem.readOnly = true; 

如果你知道只有一個名爲「添加」的「newunitform」表單中,使用LightStyle的建議元素:

var elem = document.getElementById("newunitform").add; 
elem.setAttribute("readonly", "true"); // or elem.readOnly = true; 

在任何情況下,請確保片段被執行之後,已呈現相關元素(例如,你可以把它放在主體的onload方法中。

+0

我不確定這個元素是唯一一個被命名爲「添加」的人,但我嘗試過,這不起作用... – dotcom22 2013-05-09 20:11:59

+0

你檢查過元素已經被渲染了嗎?最後加上'alert(elem)',看看會發生什麼。 – gkalpak 2013-05-09 20:55:00

0

確實如此 - 它可以是getElementById(單個元素)或getElementsByName,它可以訪問DOM中具有所需名稱的所有元素。

將元素更改爲元素後,您應該可以設置readOnly屬性。

你也可以嘗試document.getElementByNames('someElement')。disabled = true;但如果有多個具有相同名稱的元素,請注意。

此外 - 因爲像這樣的語法已經讓我絆倒任何次數,如果一個函數不能按預期工作,我會確保我得到的對象,我認爲我通過提醒一些元素的方面。

例如警報(document.getElementsByName( 'someElement')。長度)或警報(document.getElementsByName( 'someElement')。名稱)

好運