Получить имя формы через JavaScript

У меня простой вопрос, но я не могу найти хорошее решение в Интернете.

У меня есть этот HTML-код:

 <form name="Register" action="Register.aspx" method="post" runat="server" style="margin-top: 15px;" onsubmit="return validateProfile(this);" >

И этот код JavaScript

function validateProfile(F) {
var G = F.name; 
}

Я хочу как-то получить имя формы, но этот код просто не работает.

просьба о помощи, спасибо!


person Nave Tseva    schedule 24.05.2013    source источник
comment
Извините, смотрите обновленный код   -  person Nave Tseva    schedule 24.05.2013
comment
Вы пробовали F.name?   -  person 最白目    schedule 24.05.2013
comment
runat="server" ...куда еще бежать?   -  person Ja͢ck    schedule 24.05.2013
comment
Да, смотрите обновленный код   -  person Nave Tseva    schedule 24.05.2013
comment
Почему бы не вернуть return validateProfile("Register");   -  person Mad Echet    schedule 24.05.2013
comment
@ alex23 — каким волшебством ссылка, переданная функции, превратилась из элемента формы DOM в объект события? ;-)   -  person RobG    schedule 24.05.2013
comment
То, что у вас есть, прекрасно работает здесь.   -  person Ja͢ck    schedule 24.05.2013
comment
Я не вижу причин для отрицательного ответа на этот вопрос.   -  person 最白目    schedule 24.05.2013
comment
Я не вижу причин для этого вопроса.   -  person Alexander    schedule 24.05.2013
comment
Откройте консоль и проверьте, не определена ли функция... Может быть, ваша функция не загружена? В любом случае, то, что у вас есть, должно работать на получение имени, не забудьте вернуть G в функцию.   -  person Ron van der Heijden    schedule 24.05.2013


Ответы (4)


Ну вот

function validateProfile(F) {
    alert(F.name); 
    return false;
}

F уже является формой, не нужно использовать .Form .

Поскольку форма является элементом, вы можете получить доступ к ее имени, используя .name.

Это определено в спецификации DOM здесь :

имя типа DOMString

Называет форму.

Демо

Обратите внимание, что мой JSFiddle содержит window.validateProfile = validateProfile, потому что я запускаю его после того, как DOM готов, и если ваша функция не находится непосредственно в блоке скрипта, скорее всего, вам тоже нужно это сделать.

person Benjamin Gruenbaum    schedule 24.05.2013
comment
F — единственная надежная ссылка на элемент формы, this не работает с предоставленным кодом OP. - person Ja͢ck; 24.05.2013
comment
@Джек, спасибо. Это хороший комментарий, я отредактировал его в ответ. - person Benjamin Gruenbaum; 24.05.2013
comment
Я взглянул на твою скрипку, она насторожила Результат. изменение this на F предупреждает нужный регистр. О, и я не минусовал. - person 最白目; 24.05.2013
comment
А вы поняли, что this в вашем коде на самом деле относится к window? :) - person Ja͢ck; 24.05.2013
comment
@дан Спасибо! Я исправил скрипку. Я этого не заметил. Я обычно делаю ненавязчивую проверку там, где это не проблема. - person Benjamin Gruenbaum; 24.05.2013
comment
После вашего последнего редактирования он теперь выглядит точно так же, как код OP :) - person Ja͢ck; 24.05.2013
comment
@Jack OP отредактировал свой код, его исходный код был F.Form.name - person Benjamin Gruenbaum; 24.05.2013
comment
Привет, спасибо всем за ваши ответы! Я не знаю, почему, но на моем сайте F.name есть какое-то пустое значение, например, почему? - person Nave Tseva; 24.05.2013
comment
@NaveTseva Не могли бы вы создать скрипку, иллюстрирующую вашу проблему? Мой код работает (для вашей исходной проблемы), я не могу понять, что у вас есть, вероятно, люди тоже не смогут, если вы не предоставите дополнительную информацию - person Benjamin Gruenbaum; 24.05.2013
comment
@NaveTseva Обратите внимание, что в моем ответе говорится, что вы должны сделать window.validateProfile = validateProfile, в противном случае ваша функция находится в области закрытия метода onLoad. (Обратите внимание на разницу между моей скрипкой и вашей и попробуйте добавить эту строку к своей). jsfiddle.net/Hdvst - person Benjamin Gruenbaum; 24.05.2013
comment
Спасибо, на скрипке работает отлично, но не могу понять, почему на моем сайте тот же код не работает?! Я получаю пустое предупреждение - person Nave Tseva; 24.05.2013
comment
@NaveTseva Тогда вместо того, чтобы принять ответ, расширьте свой вопрос таким образом, чтобы этот ответ все еще не работал; таким образом мы сможем помочь вам лучше. - person Ja͢ck; 24.05.2013
comment
@NaveTseva Я могу играть в угадайку, но сильно сомневаюсь, что это поможет тебе. Попробуйте изолировать проблему, удаляйте части, пока не получите наименьший код, который не работает. Это может быть связано с частью runat=server, но я не эксперт по веб-формам asp (я хорошо знаю только MVC) - person Benjamin Gruenbaum; 24.05.2013
comment
Вы абсолютно точно пишете, извините, я нашел проблему, проблема в runat=server, чем я получаю этот код после Debug '‹form method=post action=Register.aspx id=ctl00 style=margin-top: 15px; onsubmit=return validateProfile(this);›' и тег имени исчез, знаете ли вы, а? - person Nave Tseva; 24.05.2013
comment
@NaveTseva Посмотрите, решит ли это вашу проблему stackoverflow.com/a/5792306/1348195 . Как я уже сказал, я не использую веб-формы. Честно говоря, если вы делаете что-то новое, я бы серьезно подумал о переключении веб-форм форм на MVC, мне потребовалось несколько недель, чтобы понять, но как только я это сделал, я стал намного продуктивнее, и это того стоило. В ASP.NET MVC таких сюрпризов нет - person Benjamin Gruenbaum; 24.05.2013
comment
обратите внимание, что атрибут формы .name может быть загрязнен входом с именем name. Например. <FORM NAME="ActualFormName"> <INPUT NAME="name">, то JavaScript будет предупреждать об объекте (вводе) вместо ActualFormName. По крайней мере, еще в IE8, если вы используете коллекцию атрибутов форм и индексируете атрибут имени, тогда он фактически вернет правильное имя. например F.attributes["name"].value; - person James Newton; 08.03.2017

Вероятно, у вас есть элемент управления в форме с именем name. Элементы управления формы доступны как свойства формы, используя их имя или идентификатор в качестве имени свойства. Итак, в:

<form name="foo" ...>
  <input name="name" ...>

тогда:

document.forms['foo'].name

возвращает ссылку на элемент ввода, а не значение свойства формы name (которое отражает значение атрибута имени HTML).

Решение состоит в том, чтобы не использовать значения атрибутов для элементов управления формы, которые совпадают со стандартными атрибутами элемента формы или именами свойств DOM (например, не называйте элементы управления формы «отправить» или «сбросить», так как они перезапишут отправить и методы reset).

person RobG    schedule 24.05.2013
comment
К сожалению, этого можно избежать. например парень, который разработал базу данных, использовал имя в качестве имени поля, а сценарий действия для отправки данных обратно недоступен (внутренний код и вы пишете пользовательский интерфейс), поэтому вам очень нужно иметь текстовый ввод с именем имя. В современных браузерах form.getAttribute(name) возвращает фактическое имя формы, но не в старых браузерах. - person James Newton; 08.03.2017
comment
Только что узнал, что form.attributes[name].value работает (возвращая имя формы, а не объект ввода) еще в IE 8, и я верю в IE7. - person James Newton; 08.03.2017

  var  theForms = document.getElementsByTagName("form");  
    for(i=0;i<theForms.length;i++)  
    alert(theForms[i].name);  

или если у вас есть только одна форма, используйте theForms [0].name напрямую

person PSR    schedule 24.05.2013

Если вы используете JQuery. Вы можете получить attr следующим образом:

$("form").attr("name"); // Register
person Jeff Lee    schedule 24.05.2013