Javascript 执行事件时不会发生任何事情
我有个困惑的问题 代码如下,我看不出任何错误,我已经与我的其他代码进行了比较,它的格式完全相同/非常相似,但由于某种原因,这个代码没有执行事件 我在if语句中也尝试过这样做:Javascript 执行事件时不会发生任何事情,javascript,html,Javascript,Html,我有个困惑的问题 代码如下,我看不出任何错误,我已经与我的其他代码进行了比较,它的格式完全相同/非常相似,但由于某种原因,这个代码没有执行事件 我在if语句中也尝试过这样做: if (regExName.test(theForm.txtName.value)) 还是一样的错误,什么也没发生。lbl???根本不显示任何消息,说明它是否工作 <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <hea
if (regExName.test(theForm.txtName.value))
还是一样的错误,什么也没发生。lbl???根本不显示任何消息,说明它是否工作
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<style type="text/css">
.auto-style1 {
width: 100%;
}
.auto-style2 {
width: 265px;
}
#Text1 {
width: 186px;
}
#Text2 {
width: 186px;
}
#Text3 {
width: 186px;
}
#txtName {
width: 186px;
}
#txtAge {
width: 186px;
}
#txtNumber {
width: 186px;
}
</style>
<script language="javascript" type="text/javascript">
function btnValidate(theForm) {
regExName = new RegExp("[a-zA-Z]");
regExAge = new RegExp("^([1])?[0-9]{2}");
regExNum = new RegExp("[2-9][0-9]{2}\-[0-9]{4}");
if (regExName.test(theForm.txtName))
lblName.innerHTML = "Valid, continue.";
else
lblName.innerHTML = "Invalid Name Entry, please try again.";
if (regExAge.test(theForm.txtAge))
lblAge.innerHTML = "Valid, continue.";
else
lblAge.innerHTML = "Invalid Age Entry, please try again.";
if (regExNum.test(theForm.txtNumber))
lblNumber.innerHTML = "Valid, continue.";
else
lblNumber.innerHTML = "Invalid Phone Number Entry, please try again.";
}
</script>
</head>
<body>
<form action="">
<table class="auto-style1">
<tr>
<td class="auto-style2">Name:
<input id="txtName" type="text" /></td>
<td>
<div id="lblName">
</div>
</td>
</tr>
<tr>
<td class="auto-style2">Age:
<input id="txtAge" type="text" /></td>
<td>
<div id="lblAge">
</div>
</td>
</tr>
<tr>
<td class="auto-style2">Number:
<input id="txtNumber" type="text" /></td>
<td>
<div id="lblNumber">
</div>
</td>
</tr>
</table>
<p>
<input id="Submit1" type="submit" value="Validate" onsubmit="btnValidate(this.form)"/></p>
</form>
</body>
</html>
.auto-style1{
宽度:100%;
}
.auto-style2{
宽度:265px;
}
#文本1{
宽度:186px;
}
#文本2{
宽度:186px;
}
#文本3{
宽度:186px;
}
#txtName{
宽度:186px;
}
#txtAge{
宽度:186px;
}
#txtNumber{
宽度:186px;
}
函数btnValidate(表单){
regExName=newregexp(“[a-zA-Z]”);
regExAge=newregexp(“^([1])?[0-9]{2}”);
regExNum=newregexp(“[2-9][0-9]{2}-[0-9]{4}”);
if(regExName.test(theForm.txtName))
lblName.innerHTML=“有效,继续。”;
其他的
lblName.innerHTML=“名称输入无效,请重试。”;
if(regExAge.test(form.txtAge))
lblAge.innerHTML=“有效,继续。”;
其他的
lblAge.innerHTML=“年龄输入无效,请重试。”;
if(regExNum.test(theForm.txtNumber))
lblNumber.innerHTML=“有效,继续。”;
其他的
lblNumber.innerHTML=“电话号码输入无效,请重试。”;
}
姓名:
年龄:
编号:
任何帮助都将不胜感激
更新的代码您的按钮不在表单中,因此
此.form
返回未定义的
。将a表单放在表的外部(和按钮),并将验证侦听器放在表单的onsubmit
处理程序上,而不是按钮上。并将输入类型按钮更改为输入类型提交
关于守则的其他一些建议:
> <script language="javascript" type="text/javascript">
变量应使用var
关键字保持在本地,因此:
var regExName = new RegExp("[a-zA-Z]");
var regExAge = new RegExp("^([1])?[0-9]{2}");
var regExNum = new RegExp("[2-9][0-9]{2}\-[0-9]{4}");
不要使用元素id作为全局变量,这是早期IE中引入的一个设计缺陷,其他浏览器为了兼容性而模仿它,只是不要这样做。使用以下命令获取对元素的引用:
var lblName = document.getElementById('lblName');
请在if语句周围使用括号。它使代码更具可读性,更易于维护。上述内容也可以应用于代码的其余部分
至于HTML:
> <!DOCTYPE html>
> <html xmlns="http://www.w3.org/1999/xhtml">
您的按钮不在表单中,因此
this.form
返回undefined
。将a表单放在表的外部(和按钮),并将验证侦听器放在表单的onsubmit
处理程序上,而不是按钮上。并将输入类型按钮更改为输入类型提交
关于守则的其他一些建议:
> <script language="javascript" type="text/javascript">
变量应使用var
关键字保持在本地,因此:
var regExName = new RegExp("[a-zA-Z]");
var regExAge = new RegExp("^([1])?[0-9]{2}");
var regExNum = new RegExp("[2-9][0-9]{2}\-[0-9]{4}");
不要使用元素id作为全局变量,这是早期IE中引入的一个设计缺陷,其他浏览器为了兼容性而模仿它,只是不要这样做。使用以下命令获取对元素的引用:
var lblName = document.getElementById('lblName');
请在if语句周围使用括号。它使代码更具可读性,更易于维护。上述内容也可以应用于代码的其余部分
至于HTML:
> <!DOCTYPE html>
> <html xmlns="http://www.w3.org/1999/xhtml">
您没有表单。“不工作”不是问题描述。
此。表单似乎不存在。这就是为什么您无法在没有表单的函数中访问其属性的原因。“不工作”不是一个问题描述。this.form
似乎不存在。这就是为什么不能在函数中访问它的属性这是这种方法的许多问题之一。我强烈建议尝试jqueryvalidate这样的标准验证技术:我已经按照您所说的做了,现在我的文本框值消失了,并且没有显示任何消息告诉我它是有效的。我会更新这个问题。@Milimetric jQuery不会修复OPs代码或标记问题,也不会教授任何有关javascript的内容。@RobG谢谢,这几乎修复了所有问题,并帮助我了解了我缺少的内容。不过,我还有最后一个要求。输入时是否可以保持显示的值,以便向我的同学演示并帮助他?(我正在辅导一名学生,所以我只是想跟上进度。)我的意思是,当我按下按钮,所有内容都有效时,页面会重置所有内容、文本框中的文本以及验证消息。@RionMurphMurphy您可以让函数始终返回false,然后表单不会提交。如果您希望表单在提交后保留其值,最好让服务器在响应中包含这些值,或者使用AJAX提交表单,而不要实际提交表单。这是这种方法的众多问题之一。我强烈建议尝试jqueryvalidate这样的标准验证技术:我已经按照您所说的做了,现在我的文本框值消失了,并且没有显示任何消息告诉我它是有效的。我会更新这个问题。@Milimetric jQuery不会修复OPs代码或标记问题,也不会教授任何有关javascript的内容。@RobG谢谢,这几乎修复了所有问题,并帮助我了解了我缺少的内容。不过,我还有最后一个要求。输入时是否可以保持显示的值,以便向我的同学演示并帮助他?
<!DOCTYPE html>
<title></title>
<script>
function btnValidate(theForm) {
var regExName = new RegExp("[a-zA-Z]");
var regExAge = new RegExp("^([1])?[0-9]{2}");
var regExNum = new RegExp("[2-9][0-9]{2}\-[0-9]{4}");
var lblName = document.getElementById('lblName');
var lblAge = document.getElementById('lblAge');
var lblNumber = document.getElementById('lblNumber');
var returnValue = true;
if (regExName.test(theForm.txtName.value)) {
lblName.innerHTML = "Valid, continue."
// If test fails, write error message and set returnValue to false
} else {
lblName.innerHTML = "Invalid Name Entry, please try again.";
returnValue = false;
}
if (regExAge.test(theForm.txtAge.value)) {
lblAge.innerHTML = "Valid, continue.";
} else {
lblAge.innerHTML = "Invalid Age Entry, please try again.";
returnValue = false;
}
if (regExNum.test(theForm.txtNumber.value)) {
lblNumber.innerHTML = "Valid, continue.";
} else {
lblNumber.innerHTML = "Invalid Phone Number Entry, please try again.";
returnValue = false;
}
// returnValue will be either false, cancelling submit, or
// any other value to continue submit
return returnValue;
}
</script>
<!-- note that the listener must return a value -->
<form action="" onsubmit="return btnValidate(this)">
<table class="auto-style1">
<tr>
<td class="auto-style2">Name:
<input name="txtName" type="text"></td>
<td>
<div id="lblName"></div>
</td>
</tr>
<tr>
<td class="auto-style2">Age:
<input name="txtAge" type="text"></td>
<td>
<div id="lblAge">
</div>
</td>
</tr>
<tr>
<td class="auto-style2">Number:
<input name="txtNumber" type="text" /></td>
<td>
<div id="lblNumber">
</div>
</td>
</tr>
</table>
<p>
<input type="submit" value="Validate"></p>
</form>
</html>