【问题标题】:Get form name via JavaScript通过 JavaScript 获取表单名称
【发布时间】:2023-04-02 05:04:01
【问题描述】:

我有一个简单的问题,但我无法在网上找到好的解决方案。

我有这个 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; 
}

我想以某种方式获取表单名称,但这段代码不起作用。

希望得到帮助,谢谢!

【问题讨论】:

  • 抱歉,查看更新代码
  • 你试过F.name吗?
  • runat="server" ... 它还能在哪里运行?
  • 是的,请查看更新后的代码
  • 为什么不返回return validateProfile("Register");

标签: javascript


【解决方案1】:

你来了

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

F已经是表单了,不用.Form了。

由于表单是一个元素,您可以使用.name 访问其名称。

这是在DOM specification here 中定义的:

DOMString 类型的

名称

为表单命名。

Demo

注意我的 JSFiddle 是如何包含 window.validateProfile = validateProfile 的,因为我在 DOM 准备好后运行它,如果您的函数不是直接在脚本块中,那么您可能也需要这样做。

【讨论】:

  • F 是对表单元素的唯一可靠引用,this 不适用于提供的代码 OP。
  • 在您最近的编辑之后,它现在看起来与 OP 的代码一模一样 :)
  • @NaveTseva 您介意创建一个小提琴来说明您的问题吗?我的代码有效(针对您的原始问题),我无法理解您所拥有的这个,除非您提供更多信息,否则人们可能也无法理解
  • @NaveTseva 看看这是否解决了您的问题stackoverflow.com/a/5792306/1348195。就像我说的,我不使用网络表单。老实说,如果你正在做任何新的东西,我会认真考虑将表单 Web 表单转换为 MVC,我花了几个星期才理解,但一旦我这样做了,我的工作效率就会提高很多,这完全值得。在 ASP.NET MVC 中没有这样的惊喜
  • 请注意,forms .name 属性可能会被名称为“name”的输入“污染”。例如。 &lt;FORM NAME="ActualFormName"&gt; &lt;INPUT NAME="name"&gt; 然后 JavaScript 将使用对象(输入)而不是“ActualFormName”发出警报。至少早在 IE8 中,如果您使用表单属性集合,并索引“名称”属性,那么它实际上会返回正确的名称。例如F.attributes["name"].value;
【解决方案2】:

您可能在表单中有一个名称为 name 的控件。表单控件可用作表单的属性,使用它们的名称或 ID 作为属性名称。所以在:

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

然后:

document.forms['foo'].name

返回对输入元素的引用,而不是表单的 name 属性的值(反映 HTML 名称属性的值)。

解决方案是不要为表单控件使用与标准表单元素属性或 DOM 属性名称相同的属性值(例如,不要将表单控件命名为“提交”或“重置”,因为它们会覆盖表单的 提交和重置方法)。

【讨论】:

  • 遗憾的是,这可能是不可避免的。例如设计数据库的人使用“名称”作为字段名称,并且无法访问用于回发数据的操作脚本(后端代码并且您正在编写用户界面),因此您几乎需要一个名为“的文本输入”姓名”。在现代浏览器中,form.getAttribute("name") 似乎返回实际的表单名称,但在旧浏览器中不会。
  • 刚刚发现 form.attributes["name"].value 早在 IE 8 就可以工作(返回表单名称,而不是输入对象),我相信 IE7。
【解决方案3】:
  var  theForms = document.getElementsByTagName("form");  
    for(i=0;i<theForms.length;i++)  
    alert(theForms[i].name);  

或者如果你只有一种形式,那么直接使用theForms [0].name

【讨论】:

    【解决方案4】:

    如果你使用 Jquery。您可以通过以下方式获取 attr:

    $("form").attr("name"); // Register
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-10-26
      • 1970-01-01
      • 1970-01-01
      • 2016-05-21
      • 2014-09-23
      • 1970-01-01
      • 2011-07-11
      相关资源
      最近更新 更多