javascript和html表单

javascript和html表单,javascript,html,Javascript,Html,我有一个使用HTML验证的表单,我有两个函数,其中一个可以访问表单,另一个不能 这是我的表格: <form id="contactForm" action="javascript:submitForm()" method="post"> <table align="center"> <tr> <th>Name:</th> <td><input ty

我有一个使用HTML验证的表单,我有两个函数,其中一个可以访问表单,另一个不能

这是我的表格:

<form id="contactForm" action="javascript:submitForm()" method="post">
    <table align="center">
        <tr>
            <th>Name:</th>
            <td><input type="text" id="name" name="name" value="a" /></td>
        </tr>
        <tr>
            <th>email:</th>
            <td><input type="text" id="email" name="email" value="sikas@sikas.x10.mx" /></td>
        </tr>
        <tr>
            <th>Message:</th>
            <td><textarea type="text" id="message" name="message">msg</textarea></td>
        </tr>
        <tr>
            <td colspan="2"><input type="submit" value="Login" /></td>
        </tr>
    </table>
</form>

姓名:
电邮:
信息:
味精
这是我的脚本,分为两部分,一部分在同一个文件中,另一部分在另一个文件中:

这是表格的一部分:

<script type="text/javascript">
function check()
{
    name = document.getElementById('name').value;
    email = document.getElementById('email').value;
    message = document.getElementById('message').value;
    if(name.length == 0 || email.length == 0 || message.length == 0)
    {
        alert("Name Required\nEmail Required\nMessage Required");
        return false;
    }
    else
    {
        var reg = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
        var address = email;
        if(reg.test(address) == false)
        {
            alert("Email Invalid");
            return false;
        }
    }
    return true;
}

var form;

function submitForm()
{
    if(check() == false)
        return false;
    else
    {
        form = document.getElementById('contactForm').innerHTML;
        document.getElementById('contactForm').innerHTML = "<h3>Sending ...</h3>";
        send();
        setTimeout("restoreForm()",1000);
    }
    return false;
}

function restoreForm()
{
    document.getElementById('contactForm').innerHTML = form;
}
</script>

函数检查()
{
name=document.getElementById('name')。值;
email=document.getElementById('email')。值;
message=document.getElementById('message')。值;
如果(name.length==0 | | | email.length==0 | | | message.length==0)
{
警报(“需要名称\n需要电子邮件\n需要消息”);
返回false;
}
其他的
{
变量reg=/^([A-Za-z0-9\-\.])+\@([A-Za-z0-9\-\.])+\.([A-Za-z]{2,4})$/;
var地址=电子邮件;
如果(注册测试(地址)=错误)
{
警报(“电子邮件无效”);
返回false;
}
}
返回true;
}
var形式;
函数submitForm()
{
如果(检查()==false)
返回false;
其他的
{
form=document.getElementById('contactForm').innerHTML;
document.getElementById('contactForm').innerHTML=“发送…”;
send();
setTimeout(“restoreForm()”,1000);
}
返回false;
}
函数restoreForm()
{
document.getElementById('contactForm')。innerHTML=form;
}
这在文件中:

// JavaScript Document
function createObject()
{
    var request_type;
    var browser = navigator.appName;
    if(browser == "Microsoft Internet Explorer")
    {
        request_type = new ActiveXObject("Microsoft.XMLHTTP");
    }
    else
    {
        request_type = new XMLHttpRequest();
    }
    return request_type;
}

var http = createObject();
var usr;
var psw;
function send()
{
    alert(document.getElementById('name').value);
    alert(document.getElementById('email').value);
    alert(document.getElementById('message').value);

    contactName = encodeURI(document.getElementById('name').value);
    contactEmail = encodeURI(document.getElementById('email').value);
    contactMessage = encodeURI(document.getElementById('message').value);
    http.open('get', 'send.php?name='+contactName+'&email='+contactEmail+'&message='+contactMessage);
    http.onreadystatechange = loginReply;
    http.send(null);
}

function loginReply()
{
    if(http.readyState == 4)
    {
        var response = http.responseText;
        alert(response);
        if(response == 0)
            //document.getElementById('submitForm').innerHTML = "<h6>Sending Failed</h6>";
            alert('failed');
        else
            //document.getElementById('submitForm').innerHTML = "<h6>Message Sent</h6>";
            alert('sent');
        //setTimeout("restoreForm()",1000);
    }
}
//JavaScript文档
函数createObject()
{
var请求类型;
var browser=navigator.appName;
如果(浏览器==“Microsoft Internet Explorer”)
{
请求类型=新的ActiveXObject(“Microsoft.XMLHTTP”);
}
其他的
{
请求类型=新的XMLHttpRequest();
}
返回请求类型;
}
var http=createObject();
var-usr;
var-psw;
函数send()
{
警报(document.getElementById('name').value);
警报(document.getElementById('email').value);
警报(document.getElementById('message').value);
contactName=encodeURI(document.getElementById('name').value);
contactEmail=encodeURI(document.getElementById('email').value);
contactMessage=encodeURI(document.getElementById('message').value);
http.open('get','send.php?name='+contactName+'&email='+contactEmail+'&message='+contactMessage);
http.onreadystatechange=loginReply;
http.send(空);
}
函数loginReply()
{
如果(http.readyState==4)
{
var response=http.responseText;
警报(响应);
如果(响应==0)
//document.getElementById('submitForm').innerHTML=“发送失败”;
警报(“失败”);
其他的
//document.getElementById('submitForm').innerHTML=“消息已发送”;
警报(“已发送”);
//setTimeout(“restoreForm()”,1000);
}
}
需要帮助使脚本从文件访问表单字段

更新:

我设法解决了这个问题。问题在于这个函数

function submitForm()
{
    if(check() == false)
        return false;
    else
    {
        form = document.getElementById('contactForm').innerHTML;
        document.getElementById('contactForm').innerHTML = "<h3>Sending ...</h3>";
        send();
        setTimeout("restoreForm()",1000);
    }
    return false;
}
函数submitForm()
{
如果(检查()==false)
返回false;
其他的
{
form=document.getElementById('contactForm').innerHTML;
document.getElementById('contactForm').innerHTML=“发送…”;
send();
setTimeout(“restoreForm()”,1000);
}
返回false;
}

函数
send()
连接到另一个页面并通过它向电子邮件发送数据,当我在调用该函数之前更改了
表单的
innerHTML
时,当尝试访问一个不存在的字段时,该函数使该函数变为
break

为什么不使用JQuery?您从头开始编写的所有这些代码都打包到一个小型、紧凑、可重用的JavaScript库中,该库旨在让您专注于业务目标,而不是重新发明轮子

我的建议是查看并浏览一些示例。我相信这会在将来为你节省很多时间和头痛


记住,你的雇主付钱给你是为了进一步解决他们的业务目标,而不是解决其他开发人员已经为你解决的问题。

替换
提交表单

document.getElementById('submitForm').innerHTML = "<h6>Message Sent</h6>"; 
document.getElementById('submitForm').innerHTML=“消息已发送”;

document.getElementById('submitForm').innerHTML=“发送失败”;

使用
contactForm

到底发生了什么?你有错误吗?你的脚本在运行吗?什么都没有!单独文件中的警报不会运行,但与表单位于同一文件中的脚本会运行。请检查其他文件是否作为脚本标记包含在HTML中。事实上,你应该为我们发布你的标题部分。我已经添加了该文件,但是文件中的js无法访问formI,我在另一个脚本中使用了相同的代码。但是在这个问题上它不起作用。我已经解决了这个问题,你可以查看帖子来看看答案。用一个较小的函数,下一个在你离开很久之后进来并接手的程序员不会犯你忽略id属性的错误。当然,这取决于你有多少时间进行重构,但我始终建议使用这样的代码:当你最终离开公司去做更大更好的事情时,你会让公司处于一种状态,其他人可以很容易地找到你离开的地方。他可能没有时间,他可能无法建议更改库或依赖项。他可能有很多遗留代码,需要时间进行重构和测试。我原则上同意使用jQuery或类似的工具来简化生活,但我不喜欢人们坚持认为它会解决别人的问题,因为引入它可能是不可能的
document.getElementById('submitForm').innerHTML = "<h6>Sending Failed</h6>";