从留言板开始做网站(八)——客户端的数据验证(JS验证方法)

这篇我给大家叙述下客户端验证用户的输入,一般都是用javascript的代码来实现的。

我们在首页的底部添加JS代码:

<script type="text/javascript">
    var user = document.getElementById("user_name");
    var mes = document.getElementById("user_mes");
    var btn = document.getElementById("btn");
    btn.οnclick=function(){
        if (user.value == "") {
            alert("用户名不得为空");
            return false;
        }
        if (mes.value == "") {
            alert("留言内容不得为空");
            return false;
        }else {
            alert("留言成功");
        }
    }
</script>
getElementById("ID名");  获取该id的元素内容,onclick点击方法。利用JS提升用户的体验,减轻服务器的工作量。

我推荐一本学习JS的书:


这里我们可以增加一个焦点内容为空的代码:

btn.οnclick=function(){
    if (user.value == "") {
        alert("用户名不得为空");
        user.focus(); //焦点该元素
        return false;
    }
    if (mes.value == "") {
        alert("留言内容不得为空");
        mes.focus(); //焦点该元素
        return false;
    }else {
        alert("留言成功");
    }
}

有时候弹窗对用户体验并不友好,所以可以用醒目的文字提示功能,我们在表单的上面添加一个隐藏的提示信息,在文本框为空的时候显示出来:

<section class="mes-send">
    <p id="notice">提示信息</p>
    <form method="post" action="send.php">
        <div class="form-group">
            <label for="user_name">姓名:</label>
            <input type="text" id="user_name" name="user_name" placeholder="用户名称" alias="用户名称">
        </div>
        <div class="form-group">
            <label for="user_mes">留言:</label>
            <textarea id="user_mes" name="user_mes" rows="5" placeholder="留言内容" alias="留言内容"></textarea>
        </div>
        <input type="submit" id="btn" value="提 交">
    </form>
</section>
并把这条提示信息的CSS设为:

#notice {
    visibility: hidden;
    margin-left: 1.25em;
    color: #c06;
}
display和visibility的区别在于隐藏的时候前者不占位,后者可以作为占位符。

然后我们输入JS代码:

<script type="text/javascript">
function checkInputs(){
    //检查浏览器是否支持
    if (!document.getElementById) return false;
    if (document.forms.length < 1) return false
    //获得表单DOM
    var theForm = document.forms[0];
    var inputs = theForm.elements;
    //获得信息提示的DOM
    var notice = document.getElementById("notice");
    //循环输出表单元素
    for (var i = 0; i < inputs.length; i++) {
        //跳过表单中的提交按钮
        if (inputs[i].type == "submit") continue;
        //文本框失去焦点
        inputs[i].οnblur=function(){
            var ph = this.alias || this.getAttribute("alias");
            this.setAttribute("placeholder",ph);
            //检查文本框是否为空
            if (this.value.length == 0) {
                notice.innerHTML=ph + "不得为空!";
                notice.style.visibility = "visible";
                return false;
            }else {
                notice.style.visibility = "hidden";
            }
        }
        //文本框获得焦点
        inputs[i].οnfοcus=function(){
            this.setAttribute("placeholder","");
        }
    }
}
checkInputs();
</script>

 
 
 

我们根据文本框的获得焦点和失去焦点来作为行动,这样的客户体验是不是好一些啊。并且获得焦点的文本框内的灰色文字会同时消失,失去焦点,则会再次显示。


代码里面有一些说明文字了,我们稍微再分解讲下:

document.forms返回的是文档中所有表单的集合数组。因为我们的留言板中只有个表单,所以将它的下标设为0:

var theForm = document.forms[0];
我们还需要获取文本框元素:

var inputs = theForm.elements;
elements返回的是表单所有元素的数组,包括按钮也是哦。我们循环数组,判断每个表单元素是否为空,是否获得焦点或者失去焦点,我这里使用了for循环,值得一提的是,因为提交按钮不是我们需要判断的元素,所以轮到它的时候,我们需要跳过,循环继续。

if (inputs[i].type == "submit") continue;
break和continue都是跳出循环,前者跳出循环并停止执行后面的流程,而continue则是跳过此次循环,继续后面的循环。

onblur失去焦点,onfocus获得焦点。

对了,还要在文本框元素内添加一个自定义属性alias,

<input type="text" id="user_name" name="user_name" placeholder="用户名称" alias="用户名称">
<textarea id="user_mes" name="user_mes" rows="5" placeholder="留言内容" alias="留言内容"></textarea>
添加这2个自定义属性是为了能让JS操作placeholder这个属性,因为在获得焦点的时候,我们使用了setAttribute(),将placeholder这个属性的值设为空了。在它失去焦点时我们需要从alias来获取它的初值,重新为placeholder赋值。

var ph = this.alias || this.getAttribute("alias");
this.setAttribute("placeholder",ph);
this.setAttribute("placeholder","");

当失去焦点的文本框为空时,更改notice的内容,并将它显示出来。

if (this.value.length == 0) {
                notice.innerHTML=ph + "不得为空!";
                notice.style.visibility = "visible";
                return false;
            }else {
                notice.style.visibility = "hidden";
            }
最后,运行这个函数

checkInputs<span style="font-family: Arial, Helvetica, sans-serif;">();</span>
我们其实可以把这个JS内容移到外部的JS文件,然后再导入到html文件内。我们新建一个文件夹命名为js,并在里面新建一个main.js文件,然后将首页内的JS内容剪切复制到该文件内,js的HTML标签不用复制<script></script>

在首页的底部</body>上面导入JS文件:

<script type="text/javascript" src="js/main.js"></script>
基本的判断是做好了,但是还有个问题,就是空内容仍旧会提交到处理文件中,我们应当如果文本框是空内容,就不能把表单提交,这个也是很简单的只要表单的onsubmit方法设成return false  ,表单就不会提交了。

我将main.js的内容重新修改了下,增加了一个checkSubmit()函数,内容如下:

function checkInputs(theForm){
    //检查浏览器是否支持
    if (!document.getElementById) return false;
    //获得表单DOM
    var inputs = theForm.elements;
    //获得信息提示的DOM
    var notice = document.getElementById("notice");
    //循环输出表单元素
    for (var i = 0; i < inputs.length; i++) {
        //跳过表单中的提交按钮
        if (inputs[i].type == "submit") continue;
        //文本框失去焦点
        inputs[i].οnblur=function(){
            var ph = this.alias || this.getAttribute("alias");
            this.setAttribute("placeholder",ph);
            //检查文本框是否为空
            if (this.value.length == 0) {
                notice.innerHTML=ph + "不得为空!";
                notice.style.visibility = "visible";
                return false;
            }else {
                notice.style.visibility = "hidden";
            }
        }
        //文本框获得焦点
        inputs[i].οnfοcus=function(){
            this.setAttribute("placeholder","");
        }
    }
}
function checkSubmit(){
    //检查浏览器兼容
    if (document.forms.length < 1) return false;
    var theForm = document.forms[0];
    //运行checkInputs函数
    checkInputs(theForm);
    //处理表单提交
    theForm.οnsubmit=function(){
        var inputs = this.elements;
        //循环输出表单元素
        for (var i = 0; i < inputs.length; i++) {
            //跳过表单提交按钮
            if (inputs[i].type == "submit") continue;
            //文本框为空,则表单提交失效
            if (inputs[i].value == "") return false;
        }
    }
}
checkSubmit();

原来的checkInputs()函数增加了一个参数theForm,你会发现这个参数就是原来的变量theForm。

新增函数内容与原来差不多,我就不一一讲解了,这里令我比较郁闷的是两个函数重复的东西有点多,可是自己的能力有限不知道该如何优化,请大神们提点一下。

用JS做了判断文本框内是否为空,现在还应该判断用户输入的值是否是恰当的值。

修改checkInputs函数,增加正则判断的功能:

function checkInputs(theForm){
    //检查浏览器是否支持
    if (!document.getElementById) return false;
    //获得表单DOM
    var inputs = theForm.elements;
    //获得信息提示的DOM
    var notice = document.getElementById("notice");
    //设置文本框的正则表达式
    var regex = /^[\u4E00-\u9FA5a-zA-Z0-9]{1,15}$/;
    //循环输出表单元素
    for (var i = 0; i < inputs.length; i++) {
        //跳过表单中的提交按钮
        if (inputs[i].type == "submit") continue;
        //文本框失去焦点
        inputs[i].οnblur=function(){
            //失去焦点,恢复预置文本
            var ph = this.alias || this.getAttribute("alias");
            this.setAttribute("placeholder",ph);
            //如果文本框为空
            if (this.value.length == 0) {
                //更改notice的文本内容,并显示
                notice.innerHTML=ph + "不得为空!";
                notice.style.visibility = "visible";
                return false;
            }else if (!regex.test(this.value) && this.type == "text"){//检查文本内容是否符合正则表达式
                notice.innerHTML = ph + "仅限中文和数字且不多于15个字符!";
                notice.style.visibility = "visible";
                return false;
            }else{
                notice.style.visibility = "hidden";
                return true;
            }
        }
        //文本框获得焦点
        inputs[i].οnfοcus=function(){
            this.setAttribute("placeholder","");
        }
    }
}
修改了原来的提示语句,应该把限定字数也要写上去,前面忘记写了。

js的正则与PHP的正则在限定中文字符上还是有所区别的,/^[\u4E00-\u9FA$/ 这个是JS的写法,/^[\x{4e00}-\x{9fa5}$/u这个是PHP的写法。

else if (!regex.test(this.value) && this.type == "text"){//检查文本内容是否符合正则表达式
                notice.innerHTML = ph + "仅限中文和数字且不多于15个字符!";
                notice.style.visibility = "visible";
                return false;
            }

这一段,是检查正则表达式的,然后又限定在用户名这个文本框,而不需要检查留言框里的内容。

其实呢,在placeholder这段在IE的低版本中是无法显示出来的,我也是偷懒了不愿意写,有兴趣的朋友可以自己写下,利用value的值来给placeholder当备胎,并给value的值加个同样的灰色文字CSS,就可以啦!

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
-5):"; int choice; cin >> choice; switch (choice) { case 0: exitFlag可以使用JavaScript来增强留言板验证功能,确保用户输入的数据符合要求。以下是一个简单的JavaScript验证留言板的示例: ```html <!DOCTYPE html> <html> <head> <title>留言板</title = true; cout << "程序已退出!" << endl; break; case 1: cout << "请输入> <style> .container { max-width: 600px; margin: 0 auto; padding: 20px; background-color: #f2f2f2; border: 1px solid #ccc; box-shadow: 0学生信息(姓名 年龄 性别 学号 成绩):" << endl; string name, gender, id; int 0 10px #ccc; } form { display: flex; flex-direction: column; align-items: age; float score; cin >> name >> age >> gender >> id >> score; studentManager.addStudent(Student(name, age center; } input[type="text"], textarea { width: 100%; padding: 10px; margin-bottom: 10px; border: 1px solid #ccc; border-radius: 5px; box-sizing: border-box, gender, id, score)); cout << "学生信息已添加!" << endl; break; case 2: ; } input[type="submit"] { background-color: #007bff; color: #fff; border: none cout << "请输入要删除的学生学号:"; cin >> id; studentManager.deleteStudent(id); cout; padding: 10px 20px; border-radius: 5px; cursor: pointer; } .message { margin-bottom: 20px; padding: 10px; background-color: #fff; border: 1 << "学生信息已删除!" << endl; break; case 3: cout << "请输入要修改的px solid #ccc; border-radius: 5px; box-shadow: 0 0 10px #ccc; word-break: break-all; } .message p:first-child { font-weight: bold; margin-bottom: 5px; 学生学号和新的学生信息(姓名 年龄 性别 学号 成绩):" << endl; string newName, } .message p:last-child { font-style: italic; font-size: 12px; color: #999 newGender, newId; int newAge; float newScore; cin >> id >> newName >> newAge >> newGender; } .error { color: red; font-size: 12px; margin-top: 5px; } </style> </head> <body> <div class="container"> <h1>留言板</h1 >> newId >> newScore; studentManager.updateStudent(id, Student(newName, newAge, newGender, newId, newScore> <form action="#" method="post" onsubmit="return validateForm()"> <label for="name">姓名:</label> <input type="text" id="name" name="name" required> <label for="email">邮箱:</label> )); cout << "学生信息已修改!" << endl; break; case 4: cout << "请输入<input type="text" id="email" name="email" required> <label for="message">留言:</label> <textarea id="message" name="message" rows="5" required></textarea> <input type="submit" value="提交留言要查找的学生学号:"; cin >> id; studentManager.findStudent(id); break; case "> </form> <div id="messages"> <!-- 这里是留言展示区 --> </div5: studentManager.displayAll(); break; default: cout << "输入有误,请重新输入!" << endl> </div> <script> function validateForm() { var name = document.getElementById("name").value; var email = document.getElementById("email").value; var message = document.getElementById("message").value; var error = document.getElementById("error"); ; break; } } return 0; } ``` 该学生管理系统共有两个类:`Student if (name == "") { error.innerHTML = "请输入您的姓名"; return false; } if (email == "")` 和 `StudentManager`,其中 `Student` 类用于表示学生信息,`StudentManager` 类用于管理学生 { error.innerHTML = "请输入您的邮箱"; return false; } if (message == "") { error.innerHTML = "请输入留言内容"; return false; } return true; } </script> </body> </html信息。在 `Student` 类中,定义了私有属性 `name`、`age`、`gender`、`id`> ``` 在这个示例中,我们添加了一个JavaScript函数`validateForm()`来验证表单数据。该函数首 和 `score`,分别表示学生姓名、年龄、性别、学号和成绩。同时,定义了公先获取表单中的姓名、邮箱和留言内容,然后检查这些值是否符合要求。 如果任何一个值为空,函数会在页面上显示一个错误信息。否则,函数会返回`true`,表单将被有方法 `setInfo`、`getName`、`getAge`、`getGender`、`getId`、`getScore`提交。 在表单元素中,我们添加了一个`onsubmit`属性,用于调用`validateForm()`函数。 和 `display`,分别用于设置、获取和显示学生信息。在 `StudentManager` 类中,定义了私这样,在用户单击提交按钮时,表单数据将被先提交给JavaScript函数进行验证,只有在验证通过后才会将表单数据提交给服务器。 在代码中,我们还添加了一个`<div>`元素来展示错误信息有属性 `students`,用于存储所有学生信息。同时,定义了公有方法 `addStudent`、`delete。如果用户未输入必填字段,错误信息将显示在该元素中。 通过这些步骤,您可以使用JavaScript来增强留言板验证功能,确保用户输入的数据符合要求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值