JavaScript FAQ(十一)——表单(Form)

简介:  九、表单 1. 验证表单(Validating a Form)Q:我如何在表单数据提交服务器之前进行验证?A:要验证表单的输入,可以在表单的onSubmit事件处理器中调用你的验证函数。当用户提交表单时,浏览器首先会调用onSubmit事件处理器。

 九、表单

 

1. 验证表单(Validating a Form

Q:我如何在表单数据提交服务器之前进行验证?
A:要验证表单的输入,可以在表单的onSubmit事件处理器中调用你的验证函数。当用户提交表单时,浏览器首先会调用onSubmit事件处理器。事实上,只有这个处理器返回true时,表单才会被提交。在下面的例子中,onSubmit事件处理器验证了用户email地址。(为了简单期间,如果地址中没有空格、包含@,并且@既不在开始也不在结尾,就认为该地址合法。)注意,处理器本身必须包含一个return语句,为了向浏览器返回ture或者false

你的Email:

这个例子使用的代码:

<script language="JavaScript">
<!--
function isValid() {
 var email=document.form1.t1.value;
 if (email.indexOf(' ')==-1 
      && 0<email.indexOf('@')
      && email.indexOf('@')+1 < email.length
 ) return true;
 else alert ('Invalid email address!')
 return false;
}
//-->
</script>
<form name=form1 
method=post
action="javascript:alert('The form is submitted.')" 
onSubmit="return isValid()">
Your email:
<input type=text name=t1 size=20 >
<input type=submit value=Submit>
</form>


2. 组合输入域(Combining Input Fields

Q:我可以只从一个文本域获取一个以上的值从而节省表单的空间吗?

A:可以。例如,你可以显示一个文本输入域和一个选择框。使用这个选择框,用户可以选择要在文本域中输入哪个类型的值。实际上,所有输入值都通过hidden表单元素提交到了服务器。试一下这个例子:

Your name:Your email address:Your country:

这个表单由下面的JavaScript代码创建:

<form name=form1 action="" onSubmit="return validate()">
<input name="name"    type=hidden value="">
<input name="email"   type=hidden value="">
<input name="country" type=hidden value="">
<select name=s1 onChange="refill()">
<option value="name" selected >Your name:
<option value="email"         >Your email address:
<option value="country"       >Your country:
</select>
<input name=t1 type=text   value="" size=20>
<input name=b1 type=submit value="Enter!">
</form>
<script language="JavaScript">
<!--
isFilled=new Array(0,0,0);
oldActiveField="name"; oldIndex=0;
theActiveField="name"; theIndex=0;
theValue='';
theForm=document.form1;
function refill() {
 oldIndex=theIndex;
 theIndex=theForm.s1.selectedIndex;
 oldActiveField=theActiveField; 
 theActiveField=theForm.s1.options[theIndex].value;
 theValue=theForm.t1.value;
 eval('theForm.'+oldActiveField+'.value=theValue');
 eval('theForm.t1.value=theForm.'+theActiveField+'.value');
 if (theValue!='') isFilled[oldIndex]=1;
 if (theValue=='') isFilled[oldIndex]=0;
}
function read() {
 oldIndex=theForm.s1.selectedIndex;
 oldActiveField=theForm.s1.options[oldIndex].value;
 theValue=theForm.t1.value;
 eval('theForm.'+oldActiveField+'.value=theValue');
 if (theValue!='') isFilled[theIndex]=1; 
 if (theValue=='') isFilled[theIndex]=0; 
}
function validate() {
 read();
 for (var k=0; k<isFilled.length; k++) {
  if (!isFilled[k]) {
   theIndex=k;
   theForm.s1.selectedIndex=k;
   theForm.t1.value='';
   theActiveField=theForm.s1.options[k].value;
   if (oldIndex==k) alert ('Please fill in your '+theActiveField)
   return false;
  }
 }
 alert ('You are submitting the following data:'
  +'/nName:    '+theForm.name.value
  +'/nEmail:   '+theForm.email.value
  +'/nCountry: '+theForm.country.value
 )
 return false;
 // Instead of returning false in all cases, 
 // a real-life code here would validate the data
 // and return true if the user submitted valid data 
}
//-->
</script>


3. 回车键会起作用吗?(Will the Enter key work?

Q:当用户按下Enter键时,我的表单会被提交吗?

A:在多数浏览其中,如果你的表单只有一个文本输入域,按下Enter键会提交表单。(表单也可能会包含其他输入元素,如复选框、下拉选择框、单选按钮、密码输入域、隐藏域等等。)

 

4. 使单选按钮不可选(Disabling a Radio Button)

Q:我如何在一个表单中让一个单选按钮不可用(即使其不可选)?

A:要让一个单选按钮不可选,可以在按钮的INPUT标记中使用onClick事件处理器,如下:

<INPUT type="radio" name="myButton" value="theValue"
onClick="this.checked=false;
alert('Sorry, this option is not available!')">

在下面的例子中,“Courier delivery”选项是不可用的。试一下——你会得到警示框:Sorry, this option is not available!

Delivery method (choose one):
download
regular mail
courier delivery

 

目录
相关文章
ractive.js联系表单动画效果源码
一款ractive.js联系表单动画效果,很有创意的发送邮件、联系内容等表单,基于ractive.js实现的动画效果,以发送信件的方式。
112 1
|
前端开发 JavaScript 安全
HTML+CSS+JS密码灯登录表单
通过结合使用HTML、CSS和JavaScript,我们创建了一个带有密码强度指示器的登录表单。这不仅提高了用户体验,还帮助用户创建更安全的密码。希望本文的详细介绍和代码示例能帮助您在实际项目中实现类似功能,提升网站的安全性和用户友好性。
205 3
|
JavaScript 数据安全/隐私保护
2024了,你会使用原生js批量获取表单数据吗
2024了,你会使用原生js批量获取表单数据吗
230 4
|
JavaScript 前端开发 数据安全/隐私保护
前端技术分享:使用Vue.js构建响应式表单
【10月更文挑战第1天】前端技术分享:使用Vue.js构建响应式表单
|
移动开发 前端开发 JavaScript
JavaScript 表单
JavaScript 表单
84 9
|
移动开发 JavaScript 前端开发
js之操作表单 | 12-4
js之操作表单 | 12-4
|
前端开发 微服务 API
微服务浪潮下的JSF革新:如何在分散式架构中构建统一而强大的Web界面
【8月更文挑战第31天】随着微服务架构的兴起,企业将应用拆分成小型、独立的服务以提高系统可维护性和可扩展性。本文探讨如何在微服务架构下构建和部署JavaServer Faces (JSF) 应用,通过RESTful服务实现前后端分离,提升灵活性和适应性。
178 1
|
人工智能 前端开发 JavaScript
react js 处理表单( form )的2个例子
react js 处理表单( form )的2个例子
|
大数据 数据处理 分布式计算
JSF 逆袭大数据江湖!看前端框架如何挑战数据处理极限?揭秘这场技术与勇气的较量!
【8月更文挑战第31天】在信息爆炸时代,大数据已成为企业和政府决策的关键。JavaServer Faces(JSF)作为标准的 Java Web 框架,如何与大数据技术结合,高效处理大规模数据集?本文探讨大数据的挑战与机遇,介绍 JSF 与 Hadoop、Apache Spark 等技术的融合,展示其实现高效数据存储和处理的潜力,并提供示例代码,助您构建强大的大数据系统。
154 0
|
Devops 持续交付 测试技术
JSF遇上DevOps:开发流程将迎巨变?一篇文章带你领略高效协同的魅力!
【8月更文挑战第31天】本文探讨了如何在JavaServer Faces(JSF)开发中融入DevOps文化,通过持续集成与部署、自动化测试、监控与日志记录及反馈机制,提升软件交付速度与质量。文中详细介绍了使用Jenkins进行自动化部署、JUnit与Selenium进行自动化测试、ELK Stack进行日志监控的具体方法,并强调了持续改进的重要性。
164 0