黑马程序员技术交流社区

标题: Javascript的问题请问checkbox,radio,select的内容为必填如何实现 [打印本页]

作者: dongyangzhang    时间: 2013-4-15 17:11
标题: Javascript的问题请问checkbox,radio,select的内容为必填如何实现
本帖最后由 dongyangzhang 于 2013-4-16 18:57 编辑
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  2. <!-- 第十题:编写HTML注册表单, 需要字段: 用户名, 密码, 确认密码, 性别(单选), 城市(下拉列表), 兴趣爱好(多选), 个人简介(文本域)。
  3. 然后使用JavaScript验证这个HTML表单,要求:
  4.         1、 用户名: 必须是字母数字或下划线, 不能以数字开头.
  5.         2、密码: 6-16位字母数字下划线.
  6.         3、确认密码: 和密码一致.
  7.         4、其他项为必填.
  8. -->
  9. <html>
  10. <head>
  11. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  12. <title>注册表单</title>
  13. <style type="text/css">
  14. .errorinfo{
  15. color: red;
  16. display: none;
  17. }
  18. </style>
  19. <script type="text/javascript">
  20. window.onload=function(){
  21. //当加载页面的时候,使用户输入框获得焦点
  22. document.forms[0].username.focus();
  23. }
  24. //检测输入的文本是否符合标准
  25. function check(inputNode,regex,divId){
  26. //通过divId获得div的节点
  27. var divNode=document.getElementById(divId);
  28. //判断输入文本的值是否符合规定的正则表达式
  29. if(regex.test(inputNode.value)){
  30.   //如果符合则把提示错误隐藏
  31.   divNode.style.display="none";
  32. }else{
  33.   //如果不符合则提示用户
  34.   divNode.style.display="block";
  35. }
  36. }
  37. //校验用户名函数
  38. function checkUsername(usernameNode){
  39. //定义正则表达式规则:必须是字母数字或下划线, 不能以数字开头.
  40. var regex=/^[a-zA-Z_]\w{0,}$/;
  41. //调用check函数
  42. check(usernameNode,regex,"usernamediv");
  43. }
  44. //校验用户输入密码函数
  45. function checkPwd(pwdNode){
  46. //定义正则表达式规则:6-16位字母数字下划线.
  47. var regex=/^\w{6,16}$/;
  48. //调用check函数
  49. check(pwdNode,regex,"pwddiv");
  50. }
  51. //校验用户输入的确认密码函数
  52. function checkRpwd(rpwdNode){
  53. //获取用户确认密码的值为value1
  54. var value1=rpwdNode.value;
  55. //通过id获取用户输入密码的值value2
  56. var value2=document.getElementById("Pwd").value;
  57. if(value1==value2){
  58.   //如果密码和确认密码的值一样,则不提示用户
  59.   document.getElementById("rpwddiv").style.display="none";
  60. }else{
  61.   //用户两次输入的密码值不一样,提示用户
  62.   document.getElementById("rpwddiv").style.display="block";
  63. }
  64. }
  65. </script>
  66. </head>
  67. <body>
  68. <center>
  69.    <form name="form">
  70.     <table border="1" cellspacing="0" >
  71.      <tr>
  72.       <td>用户名:</td>
  73.       <td><input type="text" name="username">
  74.       <div class="errorinfo" id="usernamediv">用户名输入不规范.</div>
  75.       <div>用户名必须是字母数字或下划线, 不能以数字开头.</div>
  76.       </td>
  77.      </tr>
  78.      <tr>
  79.       <td>密码:</td>
  80.       <td><input type="password" name="pwd" id="Pwd">
  81.       <div class="errorinfo" id="pwddiv">密码输入不合规定</div>
  82.       <div>密码必须是6-16位字母数字下划线组成.</div>
  83.       </td>
  84.      </tr>
  85.      <tr>
  86.       <td>确认密码:</td>
  87.       <td><input type="password" name="rpwd">
  88.       <div class="errorinfo" id="rpwddiv">两次必须密码一致.</div>
  89.       <div>保证两次输入的密码一致</div>
  90.       </td>
  91.      </tr>
  92.      <tr>
  93.       <td>性别:</td>
  94.       <td><input type="radio" name="sex" value="nv">女   
  95.        <input type="radio" name="sex" value="nan">男
  96.       </td>
  97.      </tr>
  98.      <tr>
  99.       <td>城市:</td>
  100.       <td>
  101.        <select name="city">
  102.         <option value="none">城市</option>
  103.         <option value="beijing">北京</option>
  104.         <option value="shanghai">上海</option>
  105.         <option value="zhengzhou">郑州</option>
  106.        </select>
  107.       </td>
  108.      </tr>
  109.      <tr>
  110.       <td>兴趣爱好:</td>
  111.       <td>
  112.        <input type="checkbox" name="hobby" value="football">足球
  113.        <input type="checkbox" name="hobby" value="pingpang">乒乓球
  114.        <input type="checkbox" name="hobby" value="music">音乐
  115.       </td>
  116.      </tr>
  117.      <tr>
  118.       <td>个人简介:</td>
  119.       <td><textarea rows="6" cols="16" name="gerenjianjie"></textarea></td>
  120.      </tr>
  121.      <tr>
  122.       <td colspan="2"><input type="submit" value="注册"></td>
  123.      </tr>
  124.     </table>
  125.    </form>
  126. </center>
  127. </body>
  128. </html>


  129. <p> </p>
复制代码
前面javascript的实现是参考了毕老师的视频做出来的,最后一问其他项为必填实在有点困难,求解。面试题已提交。


作者: 黄玉昆    时间: 2013-4-15 19:55
恕我孤陋寡闻,我怎么没学到这些知识呢?这是安卓方向的知识吗?请问楼主在哪看的视频啊,给我个地址吧,有时间我也好好学习学习,谢谢
作者: dongyangzhang    时间: 2013-4-15 21:15
黄玉昆 发表于 2013-4-15 19:55
恕我孤陋寡闻,我怎么没学到这些知识呢?这是安卓方向的知识吗?请问楼主在哪看的视频啊,给我个地址吧,有 ...

http://edu.csdn.net/news/2012822/9fa13987df36.shtml是这个网址,您可以打开看看,我当时就是在这里下载的。
作者: dongyangzhang    时间: 2013-4-15 21:17
视频地址有截图可以看看

QQ截图20130415211540.png (134.59 KB, 下载次数: 36)

QQ截图20130415211540.png

作者: dongyangzhang    时间: 2013-4-15 21:18
黄玉昆 发表于 2013-4-15 19:55
恕我孤陋寡闻,我怎么没学到这些知识呢?这是安卓方向的知识吗?请问楼主在哪看的视频啊,给我个地址吧,有 ...

这个是我基础测试题的最后一道题。
作者: JavaUtil    时间: 2013-4-15 21:42
本帖最后由 JavaUtil 于 2013-4-15 21:44 编辑

1、你可以和前面几个例子一样插入相应的<div>标签,写入你要显示的内容。
2、分别写入他们相应事件的响应方法,如:checkbox、radio的onclick事件的相应事件方法;seleck的onchange事件的响应方法。
3、根据响应方法判断他们相应属性。如:checkbox、radio的checked,seleck的option对象的value值。
4、属性不是你想要的值,可以设置div的display属性显示相应显示区的内容。并使方法返回false;
5、设置form标签的onSubmit事件的相应方法。可以return前面几个控件的boolean值之和来控制表单是否提交。


因为现在用的是别人的电脑,没装相关软件,不能写代码,所以就只能这么说说,不好意思。
作者: dongyangzhang    时间: 2013-4-15 22:16
JavaUtil 发表于 2013-4-15 21:42
1、你可以和前面几个例子一样插入相应的标签,写入你要显示的内容。
2、分别写入他们相应事件的响应方法, ...

txt格式的也可以吧?
作者: JavaUtil    时间: 2013-4-15 22:41
dongyangzhang 发表于 2013-4-15 22:16
txt格式的也可以吧?

如果是textarea之类的标签, 你可以写onfocus()事件的相应方法,即失去焦点事件的相应方法,然后判断它的value属性是否为空来判断是否显示div内容,并返回true或false。
作者: dongyangzhang    时间: 2013-4-16 18:55
  1. function checkForm(form)
  2. {
  3.         //定义去除空格的方法
  4.   String.prototype.trim  = function()
  5.   {
  6.     return this.replace(/(^\s+)|(\s+$)/g, "");
  7.   }
  8.         //用于存放checkbox radio
  9.   var arr = {};
  10.         //遍历form表单的所有元素
  11.   for(var i=0; i<form.elements.length; i++)
  12.   {
  13.         //获取表单的元素付给e
  14.     var e = form.elements[i];
  15.         //判断表单元素的属性名
  16.     switch(e.tagName)
  17.     {
  18.         //判断TEXTAREA是否为空
  19.       case "TEXTAREA" :
  20.         if(!e.disabled && e.value.trim()=="" && e.clientHeight>0)
  21.         {
  22.           alert("个人简历不能为空");
  23.           e.focus();
  24.           return;
  25.         } break;
  26.         //判断选择下拉框内容是否为空
  27.       case "SELECT" :
  28.         if(!e.disabled && e.value.trim()=="" && e.clientHeight>0)
  29.         {
  30.           alert("所选城市不能为空");
  31.           e.focus();
  32.           return;
  33.         } break;
  34.         //判断checkbox和radio是否为空
  35.       case "INPUT" :
  36.         //判断元素是否存在,类型是否是隐藏
  37.         if(!e.disabled && e.type!="hidden" && e.clientHeight>0)
  38.         {      
  39.                 //如果checkbox,radio存在
  40.            if("checkbox,radio".indexOf(e.type)>-1)
  41.           {
  42.                 //如果checkbox,radio的值为undefined则执行下一步
  43.             if(typeof arr[e.name]=="undefined")
  44.             {
  45.                 //把checkbox,radio的name付给a
  46.               var a = document.getElementsByName(e.name);
  47.                 //遍历checkbox,radio的所有name的value值
  48.               for(var k=0; k<a.length; k++)
  49.               {
  50.                 if(a[k].checked)
  51.                 {
  52.                   arr[e.name] = a[k].value;
  53.                   break;
  54.                 }
  55.               }
  56.                 //如果所有checkbox或radio的值为undefined则提示
  57.               if(typeof arr[e.name]=="undefined")
  58.               {
  59.                 alert("性别或者兴趣爱好不能为空");
  60.                 e.focus();
  61.                 return;
  62.               }
  63.             }
  64.           }
  65.         } break;
  66.     }
  67.   }
  68. }
复制代码
今天在百度上找到了解决方案,根据自己的理解自己加的注释,不过还是没有把checkbox和radio分开来提醒




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2