如果`name`属性无效,如何识别表单?

时间:2015-05-06 15:26:02

标签: javascript xhtml w3c-validation

我有以下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"];

2 个答案:

答案 0 :(得分:2)

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

如果您想识别一组元素,请使用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. 属性。

两个属性都是通用的(=可以在每个元素上使用)。

Javascript需要调整,但是:

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:
    }
}

此方法只能应用于xml文档(我假设在您的情况下不是问题,因为您使用xhtml标记了问题;更多详细信息http://blogs.msdn.com/b/csharpfaq/archive/2006/10/09/how-do-i-calculate-a-md5-hash-from-a-string_3f00_.aspx)。

或者你这样做:

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

最后,如果您决定使用像jquery这样的框架,您也可以编写如下代码:

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

或直接收集值:

'14:00:00'

答案 1 :(得分:1)

您可以使用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() : '';