Получение имени элемента как объекта - PullRequest
0 голосов
/ 06 апреля 2010

Это мой код JavaScript:

<script>
function change(name){
    var element = document.all.name.value;
}
</script>

Возвращает ошибку. Как передать в функцию имя элемента, чтобы изменить его значение?

Ответы [ 2 ]

7 голосов
/ 06 апреля 2010

Для быстрого исправления:

var element = document.all[name].value;

Но имейте в виду, это получает значение, а не сам элемент. Чтобы получить элемент, затем измените значение, выполните:

var element = document.all[name];
element.value = 'whee';

Кроме того, вам следует рассмотреть возможность использования другого способа доступа к элементам вместо document.all. Попробуйте использовать идентификаторы вместо имен с помощью функции document.getElementById(). См. Этот список Лучшие практики JavaScript .

Как указывает Питер Бэйли в своем ответе , многие элементы HTML могут иметь одинаковые имена. Это одна из причин, почему document.getElementById() предпочтительнее: идентификаторы элементов уникальны (в действительном HTML, конечно).

2 голосов
/ 06 апреля 2010

Если под «именем» вы подразумеваете «атрибут имени», вы должны понимать, что имена не являются уникальными для HTML-документа. Им нужен контекст.

Хотя вы можете использовать document.all - это нестандартно и работает только в IE. Вам будет лучше использовать более удобный браузер механизм.

Как правило, атрибуты имени будут принадлежать элементам формы, таким как <input/> и <select> элементы. Имена этих элементов отображаются как свойства <form> elements свойства в DOM.

Если вы можете получить доступ к объекту DOM формы, то вы также можете получить доступ к объектам DOM его элементов.

Пример

<form id="foo">
  <input type="text" name="test" />
</form>

<span onclick="change( 'foo', 'test' );">Change Value</span>

<script type="text/javascript">

function change( formId, elementName )
{
  // Get the form's DOM object
  var f = document.getElementById( formId );

  // Get the element's DOM object
  var element = f.elements[elementName];

  // Modify the element's value property
  element.value = 'Hello World';

  // Note, the above 3 lines can be refactored to this
  // document.getElementById( formId ).elements[elementName].value = 'Hello World';
}

</script>
...