在jQuery中,常用的表单事件有3种。

  • (1)focus和blur
  • (2)select
  • (3)change

实际上,除了上面这几个,还有一个submit事件。不过submit事件一般都是结合后端技术来使用,所以可以暂时不管。

一、focus和blur

focus表示获取焦点时触发的事件,而blur表示失去焦点时触发的事件,两者是相反操作。

focus和blur这两个事件往往都是配合一起使用的。例如用户准备在文本框中输入内容时,此时它会获得光标,就会触发focus事件。当文本框失去光标时,就会触发blur事件。

并不是所有的HTML元素都有焦点事件,具有“获取焦点”和“失去焦点”特点的元素只有两种。

  • (1)表单元素(单选框、复选框、单行文本框、多行文本框、下拉列表)
  • (2)超链接

判断一个元素是否具有焦点很简单,我们打开一个页面后按Tab键,能够选中的就是带有焦点特性的元素。在实际开发中,焦点事件(focus和blur)一般用于单行文本框和多行文本框,其他地方比较少见。

举例:搜索框

<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title></title> <style type="text/css"> #search{color:#BBBBBB;} </style> <script src="js/jquery-1.12.4.min.js"></script> <script> $(function () { //获取文本框默认值 var txt = $("#search").val(); //获取焦点 $("#search").focus(function(){ if($(this).val() == txt){ $(this).val(""); } }) //失去焦点 $("#search").blur(function () { if ($(this).val() == "") { $(this).val(txt); } }) }) </script> </head> <body> <input id="search" type="text" value="百度一下,你就知道" /> <input type="button" value="搜索" /> </body> </html>

浏览器预览效果如下图所示。

分析:

在这个例子中,当文本框获得焦点(也就是有光标)时,提示文字就会消失。当文本框失去焦点时,如果没有输入任何内容,提示文字会重新出现。从这里小伙伴们可以感性认识到“获取焦点”和“失去焦点”是怎么一回事。

上面搜索框的外观还有待改善,不过技巧已经交给大家了。我们可以动手尝试去实现一下更加好看点的搜索框,会从中学到很多东西的。

像上面这种搜索框的提示文字效果,其实我们也可以使用HTML5表单元素新增的placeholder属性来实现,代码如下:

<input id="search" type="text" placeholder="百度一下,你就知道" />

对于焦点事件来说,还有一点要补充的。默认情况下,文本框是不会自动获取焦点的,而必须点击文本框才会获取。但是我们却经常看到很多页面一打开的时候,文本框就已经自动获取到了焦点,例如百度首页(大家可以去看看)。那么这个效果是怎么实现的呢?很简单,也是使用focus()方法来实现。

举例:自动获取焦点

<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title></title> <script src="js/jquery-1.12.4.min.js"></script> <script> $(function () { $("#txt").focus(); }) </script> </head> <body> <input id="txt" type="text" /> </body> </html>

浏览器预览效果如下图所示。

分析:

focus()不仅作为一个事件,还可以作为一个方法。

二、select

在jQuery中,当我们选中“单行文本框”或“多行文本框”中的内容时,就会触发select事件。

举例:

<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title></title> <script src="js/jquery-1.12.4.min.js"></script> <script> $(function () { $("#txt1").select(function(){ alert("你选中了单行文本框中的内容") }) $("#txt2").select(function () { alert("你选中了多行文本框中的内容") }) }) </script> </head> <body> <input id="txt1" type="text" value="绿叶学习网,给你初恋般的感觉"/><br /> <textarea id="txt2" cols="20" rows="5">绿叶学习网,给你初恋般的感觉</textarea> </body> </html>

浏览器预览效果如下图所示。

分析:

当我们选中单行文本框或多行文本框中的内容时,都会弹出对应的对话框。select事件在实际开发中用得极少,我们了解一下就行,不需要深入。

再回到实际开发中,我们在使用搜索框的时候,每次点击搜索框,它就自动帮我们把文本框内的文本全选中了(大家先去看看百度搜索是不是这样的),这个又是怎么实现的呢?这其实用到的也是select()方法。

举例:全选文本

<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title></title> <script src="js/jquery-1.12.4.min.js"></script> <script> $(function () { $("#search").click(function(){ $(this).select(); }) }) </script> </head> <body> <input id="search" type="text" value="百度一下,你就知道" /> </body> </html>

默认情况下,预览效果如下图所示。

当我们点击文本框时,预览效果如下图所示。

分析:

跟focus()方法一样,select()不仅作为一个事件,还可以作为一个方法。

三、change

在jQuery中,change事件常用于“具有多个选项的表单元素”。

  • (1)单选框选择某一项时触发。
  • (2)复选框选择某一项时触发。
  • (3)下拉菜单选择某一项时触发。

举例:单选框

<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title></title> <script src="js/jquery-1.12.4.min.js"></script> <script> $(function () { $('input[type="radio"]').change(function(){ var bool = $(this).prop("checked"); if(bool){ $("p").text("你选择的是:" + $(this).val()); } }) }) </script> </head> <body> <div> <label><input type="radio" name="fruit" value="苹果" />苹果</label> <label><input type="radio" name="fruit" value="香蕉" />香蕉</label> <label><input type="radio" name="fruit" value="西瓜" />西瓜</label> </div> <p></p> </body> </html>

默认情况下,预览效果如下图所示。

当我们选中任意一项时,就会立即显示出结果来,此时预览效果如下图所示。

分析:

表示选取所有单选框,这是一种属性选择器,之前我们已经接触过了。

$(this).prop("checked")表示获取单选框checked属性的取值。

从之前“5.1 属性操作”这一节中我们知道:对于表单元素的checked、selected、disabled这些属性,我们使用attr()方法是没法获取的,而必须使用prop()方法来获取。

举例:复选框的全选与反选

<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title></title> <script src="js/jquery-1.12.4.min.js"></script> <script> $(function () { $("#selectAll").change(function(){ var bool = $(this).prop("checked"); if(bool){ $(".fruit").prop("checked","checked"); }else{ $(".fruit").removeProp("checked"); } }) }) </script> </head> <body> <div> <p><label><input id="selectAll" type="checkbox"/>全选/反选:</label></p> <label><input type="checkbox" class="fruit" value="苹果" />苹果</label> <label><input type="checkbox" class="fruit" value="香蕉" />香蕉</label> <label><input type="checkbox" class="fruit" value="西瓜" />西瓜</label> </div> </body> </html>

浏览器预览效果如下图所示。

分析:

当【全选】复选框被选中时,下面所有复选框就会被全部选中。然后再次点击【全选】按钮,此时下面所有复选框就会被取消选中。

哪个元素在搞事(触发事件),$(this)就是哪个。我们一定要清楚这一点,后面会经常碰到。

举例:下拉列表

<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title></title> <script src="js/jquery-1.12.4.min.js"></script> <script> $(function () { $("select").change(function(){ var link = $(":selected").val(); window.open(link); }) }) </script> </head> <body> <select> <option value="http://wwww.baidu.com">百度</option> <option value="http://www.qq.com">腾讯</option> <option value="http://www.sina.com.cn">新浪</option> <option value="http://www.sohu.com">搜狐</option> <option value="http://www.163.com">网易</option> </select> </body> </html>

浏览器预览效果如下图所示。

分析:

当我们选择下拉列表的某一项时,就会触发change事件,然后就会在新的窗口打开对应的页面。下拉菜单这种效果还是比较常见的,我们可以了解一下。

(":selected").val()表示选取被选中的下拉菜单的选项(即被选中的option元素),然后获取该选项的value值。其中,(":selected")是一个表单属性伪类选择器,我们在之前“3.7 表单属性伪类选择器”这一节已经详细介绍过了。