【问题标题】:How to Identify a Form if `name` Attribute is invalid?如果 `name` 属性无效,如何识别表单?
【发布时间】:2015-05-06 15:26:02
【问题描述】:

我有以下 HTML 代码行来识别用于 JScript 目的的表单:

<form action="/form-to-email.php" method="post" name="helprequest" onsubmit="return validateHelpForm()">

但是,当我去验证网页时(通过 W3C for XHTML Strict),我收到以下错误消息:

there is no attribute "name"

如果我有以下 JScript 代码,我如何识别我的表单。我应该忽略 W3C 验证吗? (这是唯一没有使其 W3C 有效并且可以正常工作的事情)

// Text Field Validation
x1 = document.forms["helprequest"]["Name"];
x2 = document.forms["helprequest"]["Mailing_Address"];
x3 = document.forms["helprequest"]["Address_line2"];
x4 = document.forms["helprequest"]["City"];
x5 = document.forms["helprequest"]["State"];
x6 = document.forms["helprequest"]["ZipCode"];
x7 = document.forms["helprequest"]["Country"];
x8 = document.forms["helprequest"]["FromAddress"];
x9 = document.forms["helprequest"]["ProblemDescription"];
x12 = document.forms["helprequest"]["PhoneNumber"];

【问题讨论】:

  • 改用id

标签: javascript xhtml w3c-validation


【解决方案1】:

使用id 属性。只需确保它们的值在页面上保持唯一即可。

如果您希望识别一组元素,请使用class 属性。

这两个属性都是通用的(= 可以用于每个元素)。

不过,Javascript 需要调整:

function getElementByXpath(path) {
    return document.evaluate(
                 path
               , document
               , null
               , XPathResult.FIRST_ORDERED_NODE_TYPE
               , null
           ).singleNodeValue;
}

x1 = getElementByXpath("/html/body//form[@id='helprequest']//*[@name='Name']");
// ... etc.

此方法只能应用于 xml 文档(我认为这对您来说不是问题,因为您使用 xhtml 标记了问题;更多详细信息here)。

或者你可以这样:

var e_form   = document.getElementById("helprequest");
var a_inputs = e_form.getElementsByTagName("input");

for (var i=0; i <= a_inputs.length; i++) {
    switch ( a_inputs[i].getAttribute("name") ) {
        case "Name": x1 = a_inputs[i]; break;
        case "City": x4 = a_inputs[i]; break;
        // ...
        default:
    }
}

最后,如果你决定使用 jquery 之类的框架,你也可以编写如下代码:

x1 = $("#helprequest input[name='Name']")[0]; // element; without '[0]': jquery object

或直接收集值:

var v1 = $("#helprequest input[name='Name']").val();

【讨论】:

  • 但是我是否也必须更改为 JavaScript 代码?
【解决方案2】:

您可以为此使用 jQuery:

xObject = $('form[name=helprequest] input[name=Name]');
x1 = (x1Object.lengt) ? x1Object.val() : '';

xObject = $('form[name=helprequest] input[name=Mailing_Address]');
x2 = (xObject.lengt) ? xObject.val() : '';

【讨论】:

  • 这个不要使用 JQuery。
猜你喜欢
  • 1970-01-01
  • 2021-09-11
  • 2017-05-10
  • 2016-03-19
  • 2012-08-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-19
相关资源
最近更新 更多