表单验证不工作在chrome和firefox

Form validation not working in chrome nor firefox

本文关键字:chrome firefox 工作 验证 表单      更新时间:2023-09-26

我正在处理这个联系人表单。

<form name="contact" action="mailto:me@me.com&subject=subject&body=message"  
 onsubmit="return validate()" method="post" enctype="text/plain">
<label for="mail">Your mail address *</label>
<input type="text" name="mail"/></br></br>
<label for="subject">Subject *</label>
<input type="text" name="subject"/></br>
<label for="message">Your message *</label>
<textarea id="txtarea" name="message" form="contact"></textarea>
<input type="submit" value="Send"/>
</form>

这个javascript

function validateMail(mail) {
var re = /^(([^<>()[']''.,;:'s@'"]+('.[^<>()[']''.,;:'s@'"]+)*)|     ('".+'"))@(('[[0-9]{1,3}'.[0-9]{1,3}'.[0-9]{1,3}'.[0-9]{1,3}'])|(([a-zA-Z'-0-9]+'.)+[a-zA-Z]{2,}))$/;
return re.test(mail);
}
function validate(){
var x = document.forms["contact"];  
if (x[0].value == null || x[0].value == ""){
    alert("Your mail address");
    return false;
}else{
    if(!validateMail(x[0].value)){
        alert("mail address not valid");
        return false;
    }
}
if(x[1].value == null || x[1].value == ""){
    alert("Add a subject");
    return false;
}
if(x['txtarea'].value.length < 1 || x['txtarea'].value == '' || x['txtarea'].value == null){
    alert("Add your message");
    return false;
}  
}

此代码在IE11(11.0.9600.18500)上完美工作,但chrome 54.0.2840.71 m(64位)和FF 49.0.2只是忽略我的javascript并继续发送带有空字段或无效信息的邮件。

PS:我使用id的文本区域,因为我不能找到它的形式[#]选项

编辑:我发现IE正确地识别文本区域为[object HTML TextAreaElement],但对于chrome和firefox都是未定义的

问题是你的textarea,从它删除form="contact"。您可以使用下面的表单-

<form name="contact" action="mailto:me@me.com&subject=subject&body=message" onsubmit="return validate()" method="post" enctype="text/plain">
    <label for="mail">Your mail address *</label>
    <input type="email" name="mail" /></br>
    </br>
    <label for="subject">Subject *</label>
    <input type="text" name="subject" /></br>
    <label for="message">Your message *</label>
    <textarea id="txtarea" name="message"></textarea>
    <input type="submit" value="Send" />
</form>

这里是为你的表单优化的Javascript函数-

function validateMail(mail) {
    var re = /^(([^<>()[']''.,;:'s@'"]+('.[^<>()[']''.,;:'s@'"]+)*)|     ('".+'"))@(('[[0-9]{1,3}'.[0-9]{1,3}'.[0-9]{1,3}'.[0-9]{1,3}'])|(([a-zA-Z'-0-9]+'.)+[a-zA-Z]{2,}))$/;
    return re.test(mail);
}
function validate() {
    var x = document.forms["contact"];
    if (!x[0].value) {
        alert("Your mail address");
        return false;
    } else {
        if (!validateMail(x[0].value)) {
            alert("mail address not valid");
            return false;
        }
    }
    if (!x[1].value) {
        alert("Add a subject");
        return false;
    }
    if (!x['txtarea'].value) {
        alert("Add your message");
        return false;
    }
}

使用:

if(document.getElementById('txtarea').value.length < 1 || document.getElementById('txtarea').value == '' || document.getElementById('txtarea').value == null)

代替:

if(x['txtarea'].value.length < 1 || x['txtarea'].value == '' || x['txtarea'].value == null)

因为chrome和firefox都不能正确处理表单['id']