2015-04-07 3 views
0

Я не могу найти правдоподобное объяснение для следующего поведения кода javascript. Я не очень хорошо знаком с javascript, и если бы следующий код был действительно действительным.Почему document.DOM-object.property null в устаревшем приложении

В мигрировали унаследованного приложения есть код вдоль этих линий:

function myFunctionName(name) 
{ 
    for(k=0; k < document.budget_sections.length; ++k) { 
    //...do something 
    } 
} 

Обратите внимание document.budget_sections.length части. В производстве этот код вызывает ошибку, говорящий, что не может получить доступ к значению длины null. В моей среде Dev это работает нормально. Поскольку budget_sections является Id элемента формы (<form id="budget_sections" method="post" runat="server">) Я изменил код с синтаксисом, который известен мне:

function myFunctionName(name) 
{ 
    var form = document.getElementById("budget_sections"); 
    for(k=0; k < form.length; ++k) { 
    //...do something 
    } 
} 

Этот синтаксис/нотация используется на протяжении всего приложения и работает на большинстве страниц. Вопрос для меня здесь: почему и до сих пор работает этот старый код и почему он может прорваться? Я никогда не читал нотацию document.DOM-object.xxx, и я не могу найти документацию об этом.

ответ

1

Поскольку budget_sections это идентификатор элемента

Нет, это имя формы.

document.formname.length 

все еще работает.

Я не могу найти документацию об этом.

Вот один из таких примеров в MDN для document.images.length

MDN link

Все это в вашем documentproperties. Вы можете узнать больше об этом на этой боковой панели слева. Вы найдете документацию для всех свойств, подобных document.DOM_Object.property

+0

Это очищает вещи немного. Но я правильно определяю Id. Он определяется как '

', а не как имя. – Marco

+0

Вы можете сделать снимок. Создайте форму с 'id =" budget_sections "и другой формой с' name = "budget_sections". Спецификация DOM позволяет использовать только атрибут name, а не ID – mohamedrias

0

Это следует использовать, если я помню, как мои IE6 дни правильно document.forms [ «budget_sections»], чтобы получить элементы формы ...

Существовал разница между тем, как IE и Netscape обрабатывают вещи. Но я не уверен, так как это было более 15 лет назад.

1

Я думаю это старый нотация. Если установить имя атрибута ваших форм «budget_sections» вместо идентификатора, то он будет работать:

<!DOCTYPE html> 
 
<html> 
 
<body> 
 

 
<form name="xx"> 
 
    Form 1 
 
</form> 
 
<form name="xx"> 
 
    Form 2 
 
</form> 
 

 
<button onclick="alert(document.xx.length)">Number of forms</button> 
 

 
</body> 
 
</html>

или вы можете получить тот же результат с формами вместо значения имени:

<!DOCTYPE html> 
 
<html> 
 
<body> 
 

 
<form name="xx"> 
 
    Form 1 
 
</form> 
 
<form name="xx"> 
 
    Form 2 
 
</form> 
 

 
<button onclick="alert(document.forms.length)">Number of forms</button> 
 

 
</body> 
 
</html>

+0

У вас есть объяснение об атрибуте ID и имени на http://stackoverflow.com/questions/1397592/difference-between-id-and-name-attributes-in -html – Zivko

+0

Из того, что я здесь делаю, оригинальный создатель этого кода испортил идентификатор и имя, и он каким-то образом работал в любом случае. – Marco