2013-05-09 106 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')。名称)

好运