使用getElementsByName进行只读?

时间:2013-05-09 19:47:17

标签: javascript

我需要通过在外部JS文件中放置javascript代码来使“readonly”成为一个文本字段。我无法直接修改html,因为页面位于远程服务器上。但我可以通过在位于我自己的主机上的外部JS中添加代码来进行交互。

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;

但没有工作。

4 个答案:

答案 0 :(得分:0)

正如Rocket Hazmat在对你的问题的评论中建议的那样,你应该使用

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

答案 1 :(得分:0)

document.getElementsByName('name')

返回一个数组。您需要使用括号或.item()来指向您的元素。 我建议你使用这个,在我看来这是一个更好的解决方案:

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

答案 2 :(得分:0)

如果您知道只有一个名为“add”的元素,您可以尝试这样的事情:

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

如果您知道“newunitform”表单中只有一个名为“add”的元素,请使用LightStyle的建议:

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

在任何情况下,请确保代码片段在之后已执行相关元素(例如,您可以将其放在正文的onload方法中。

答案 3 :(得分:0)

这是真的 - 它是getElementById(单个元素)或getElementsByName,它访问DOM中具有您正在寻找的名称的所有元素。

将Element更改为Elements后,您应该能够设置readOnly属性。

您也可以尝试使用document.getElementByNames('someElement')。disabled = true;但如果有多个具有相同名称的元素,请小心。

另外 - 因为这样的语法已经绊倒了我很多次,如果一个函数没有按预期工作,我会确保我得到的对象我认为我通过警告某些方面得到了元素。

e.g。 alert(document.getElementsByName('someElement')。length)或alert(document.getElementsByName('someElement')。name)

祝你好运