• Java基础之《Ajax+JQuery(JavaEE开发进阶Ⅱ)》—JQuery事件与动画(1)


    jQuery事件相关介绍

    一、文档加载事件
    $(document).ready()和window.onload方法区别?
    jQuery当中用$(document).ready()代替了传统的、javascript当中的window.onload

    1、执行时机不同
    window.onload方法是在网页中的元素(包括元素的所有关联文件)完全加载到浏览器后执行,即javascript此时才可以访问网页中的任何元素。
    而$(document).ready()方法在DOM完全就绪时就可以被调用,无需等待元素的相关联文件下载完毕,可以大大提高程序的响应速度。

    2、使用次数不同
    window.onload事件一次只能保存一个函数的引用。
    $(document).ready()方法每次调用都会在现有的行为上追加新的行为。

    3、$()和window.onload区别.html

    1. <html>
    2. <head>
    3. <title>$()和window.onload区别title>
    4. <style type="text/css">
    5. style>
    6. <script type="text/javascript" src="script/jquery-3.6.0.js">script>
    7. <script type="text/javascript">
    8. /*
    9. //javascript事件可以获得图片宽度
    10. window.onload=function(){
    11. alert($("img").width());
    12. };
    13. */
    14. /*
    15. //jQuery事件
    16. //目前jQuery也可以获取图片宽度,加载时机提前了?
    17. $(function(){
    18. alert($("img").width());
    19. });
    20. */
    21. /*
    22. //jQuery中类似window.onload事件
    23. //$(window).load()在1.8开始不支持了
    24. //.load, .unload, and .error, deprecated since jQuery 1.8, are no more. Use .on() to register listeners.
    25. $(window).on("load",function(){
    26. alert($("img").width());
    27. });
    28. */
    29. /*
    30. //只能绑定最后一个函数
    31. window.onload=function(){
    32. alert("hello1");
    33. }
    34. window.onload=function(){
    35. alert("hello2");
    36. }
    37. */
    38. //弹出两个消息框,提示hello1,再提示hello2
    39. $(function(){
    40. alert("hello1");
    41. });
    42. $(function(){
    43. alert("hello2");
    44. });
    45. script>
    46. head>
    47. <body>
    48. <img src="https://www.baidu.com/img/PCtm_d9c8750bed0b3c7d089fa7d55720d6cf.png" />
    49. body>
    50. html>

    二、jQuery事件绑定
    1、在文档装载完成后,如果打算为元素绑定事件来完成某些操作,则可以使用bind()方法来对匹配元素进行特定事件的绑定
    格式:

    bind(type, [data], fn);

    说明:
    type:事件类型
    data:传递给处理函数进行处理的额外数据
    fn:用来绑定的处理函数
    例子:

    1. $("div").bind("click", function(){}); //给div绑定一个点击事件
    2. $("div").bind("mouseover mouseout", function(){}); //同时绑定多个事件

    三、jQuery常用的事件类型
    1、click、dbclick、blur、focus、resize、scroll、unload、mousedown、mouseup、mousemove、mouseover、mouseout、mouseenter、mouseleave、change、select、submit、keydown、keyup、keypress和error等。
    当然这些事件类型都可以用bind方法来绑定,其实jQuery也为这些事件类型专门设计了简写的方法。

    2、绑定事件.html

    1. <html>
    2. <head>
    3. <title>绑定事件title>
    4. <style type="text/css">
    5. table{ border:0; border-collapse:collapse; }
    6. td{ font:normal 12px/17px Arial; padding:2px; width:100px; }
    7. th{ font:bold 12px/17px Arial; text-align:center; padding:4px; border-bottom:1px solid #333; }
    8. .even{ background:#FFF38F; } /*偶数行样式*/
    9. .odd{ background:#FFFFEE; } /*奇数行样式*/
    10. .selected{ background:#FF6500; color:#fff; }
    11. .over{ background:green; }
    12. style>
    13. <script type="text/javascript" src="script/jquery-3.6.0.js">script>
    14. <script type="text/javascript">
    15. $(function(){
    16. //给奇偶行加上背景色
    17. //查找tbody元素内的tr的奇数行,添加类选择器
    18. $("tbody>tr:odd").addClass("odd");
    19. $("tbody>tr:even").addClass("even");
    20. /*
    21. //给tbody里所有行绑定一个点击事件,点击一行增加样式
    22. $("tbody>tr").bind("click", function(){
    23. //判断行有没有被选中
    24. var hasSelected=$(this).hasClass("selected");
    25. if (hasSelected){
    26. $(this).removeClass("selected").find(":checkbox").attr("checked",false);
    27. }else{
    28. $(this).addClass("selected").find(":checkbox").attr("checked",true);
    29. }
    30. })
    31. //当鼠标移到某一行上给它加背景
    32. //链式操作再绑定一个事件
    33. .bind("mouseover", function(){
    34. $(this).addClass("over");
    35. }).bind("mouseout", function(){
    36. $(this).removeClass("over");
    37. });
    38. */
    39. //不用bind,用jQuery提供的方法
    40. //给tbody里所有行绑定一个点击事件,点击一行增加样式
    41. $("tbody>tr").click(function(){
    42. //判断行有没有被选中
    43. var hasSelected=$(this).hasClass("selected");
    44. if (hasSelected){
    45. $(this).removeClass("selected").find(":checkbox").attr("checked",false);
    46. }else{
    47. $(this).addClass("selected").find(":checkbox").attr("checked",true);
    48. }
    49. })
    50. //当鼠标移到某一行上给它加背景
    51. //链式操作再绑定一个事件
    52. .mouseover(function(){
    53. $(this).addClass("over");
    54. }).mouseout(function(){
    55. $(this).removeClass("over");
    56. });
    57. //一开始被选中的控件添加背景色
    58. $("tbody>tr:has(':checked')").addClass("selected");
    59. });
    60. script>
    61. head>
    62. <body>
    63. <table>
    64. <thead>
    65. <th> th>
    66. <th>姓名th>
    67. <th>性别th>
    68. <th>暂住地th>
    69. thead>
    70. <tbody>
    71. <tr>
    72. <td><input type="checkbox" name="choice" value="" />td>
    73. <td>张三td>
    74. <td>td>
    75. <td>浙江宁波td>
    76. tr>
    77. <tr>
    78. <td><input type="checkbox" name="choice" value="" />td>
    79. <td>李四td>
    80. <td>td>
    81. <td>浙江杭州td>
    82. tr>
    83. <tr>
    84. <td><input type="checkbox" name="choice" value="" checked="checked" />td>
    85. <td>王五td>
    86. <td>td>
    87. <td>湖南长沙td>
    88. tr>
    89. <tr>
    90. <td><input type="checkbox" name="choice" value="" />td>
    91. <td>赵六td>
    92. <td>td>
    93. <td>浙江温州td>
    94. tr>
    95. <tr>
    96. <td><input type="checkbox" name="choice" value="" />td>
    97. <td>raintd>
    98. <td>td>
    99. <td>浙江杭州td>
    100. tr>
    101. <tr>
    102. <td><input type="checkbox" name="choice" value="" />td>
    103. <td>maxtd>
    104. <td>td>
    105. <td>浙江杭州td>
    106. tr>
    107. tbody>
    108. table>
    109. body>
    110. html>

    3、事件触发范围
    对li标签绑定一个click事件,那么点击事件的范围是这个

  • 标签到
  • 标签内的所有空间

    四、合成事件
    1、hover()方法
    格式:

    hover(enter, leave);

    说明:
    用于模拟光标悬停事件,当鼠标移到元素上的时候会触发enter函数,当鼠标离开元素的时候会触发leave函数

    2、toggle()方法
    格式:

    toggle([fn1], [fn2], [fn3]...)

    说明:
    (1)用于绑定两个或多个事件的处理器函数,以响应被选元素的轮流的click事件。第一次点击执行fn1函数,第二次点击执行fn2函数,第三次点击执行fn3函数。假设总共有三个函数,再点击的时候又从第一个函数开始
    (2)当toggle内没有参数时,toggle()方法另一个功能是,元素原来为显示的时候隐藏,隐藏的时候显示

    3、hover.html

    1. <html>
    2. <head>
    3. <title>hovertitle>
    4. <style type="text/css">
    5. * {margin:0; padding:0; }
    6. body {font-size:13px; line-height:130%; padding:60px; }
    7. #panel {width:300px; border:1px solid #0050D0; }
    8. .head {height:24px; line-height:24px; text-indent:10px; background:#96E555; cursor:pointer; width:100%; }
    9. .content {padding:10px; text-indent:24px; border-top:1px solid #0050D0; display:none; }
    10. style>
    11. <script type="text/javascript" src="script/jquery-3.6.0.js">script>
    12. <script type="text/javascript">
    13. $(function(){
    14. //当鼠标移动到h5标题上时,下面div内容可见。离开标题内容不可见
    15. $(".head").hover(function(){
    16. //当前对象的下一个对象,显示
    17. $(this).next().show();
    18. }, function(){
    19. //隐藏
    20. $(this).next().hide();
    21. });
    22. });
    23. script>
    24. head>
    25. <body>
    26. <div id="panel">
    27. <h5 class="head">什么是jQuery?h5>
    28. <div class="content">
    29. jQuery是一个快速、简洁的JavaScript框架,是继Prototype之后又一个优秀的JavaScript代码库(框架)于2006年1月由John Resig发布。jQuery设计的宗旨是“write Less,Do More”,即倡导写更少的代码,做更多的事情。它封装JavaScript常用的功能代码,提供一种简便的JavaScript设计模式,优化HTML文档操作、事件处理、动画设计和Ajax交互。
    30. div>
    31. div>
    32. body>
    33. html>

    4、toggle.html

    1. <html>
    2. <head>
    3. <title>hovertitle>
    4. <style type="text/css">
    5. * {margin:0; padding:0; }
    6. body {font-size:13px; line-height:130%; padding:60px; }
    7. #panel {width:300px; border:1px solid #0050D0; }
    8. .head {height:24px; line-height:24px; text-indent:10px; background:#96E555; cursor:pointer; width:100%; }
    9. .content {padding:10px; text-indent:24px; border-top:1px solid #0050D0; display:none; }
    10. style>
    11. <script type="text/javascript" src="script/jquery-3.6.0.js">script>
    12. <script type="text/javascript">
    13. $(function(){
    14. //点击h5标题,div显示的变隐藏,隐藏的变显示
    15. $(".head").click(function(){
    16. $(this).next().toggle();
    17. });
    18. });
    19. script>
    20. head>
    21. <body>
    22. <div id="panel">
    23. <h5 class="head">什么是jQuery?h5>
    24. <div class="content">
    25. jQuery是一个快速、简洁的JavaScript框架,是继Prototype之后又一个优秀的JavaScript代码库(框架)于2006年1月由John Resig发布。jQuery设计的宗旨是“write Less,Do More”,即倡导写更少的代码,做更多的事情。它封装JavaScript常用的功能代码,提供一种简便的JavaScript设计模式,优化HTML文档操作、事件处理、动画设计和Ajax交互。
    26. div>
    27. div>
    28. body>
    29. html>

    五、事件对象
    1、事件对象主要封装了事件发生的详细信息,尤其是鼠标、键盘事件。在jQuery中使用事件对象非常简单,只需要为函数添加一个参数
    例子:

    1. $("element").bind("click", function(event){ //event事件对象
    2. //函数处理语句
    3. });

    六、停止事件冒泡
    1、使用event.stopPropagation()方法来停止事件冒泡。
    冒泡事件:
    就是当设定了多个div的嵌套时;即建立了父子关系,当父div与子div共同加入了onclick事件时,当触发了子div的onclick事件后,子div进行相应的js操作。但是父div的onclick事件同样会被触发。这就造成了事件的多层并发,导致了页面混乱。这就是冒泡事件。

    2、停止事件冒泡.html

    1. <html>
    2. <head>
    3. <title>停止事件冒泡title>
    4. <style type="text/css">
    5. * {margin:0; padding:0; }
    6. body {font-size:13px; line-height:130%; padding:60px; }
    7. #content {width:220px; border:1px solid #0050D0; background:#96E555; }
    8. span {width:200px; margin:10px; background:#666666; cursor:pointer; color:white; display:block; }
    9. p {width:200px; background:#888; color:white; height:16px; }
    10. style>
    11. <script type="text/javascript" src="script/jquery-3.6.0.js">script>
    12. <script type="text/javascript">
    13. $(function(){
    14. //为span元素绑定click事件
    15. $("span").bind("click",function(){
    16. var txt = $("#msg").html() + "

      内层span元素被点击.

      "
      ;
    17. $("#msg").html(txt);
    18. event.stopPropagation();
    19. });
    20. //为div元素绑定click事件
    21. $("#content").bind("click",function(){
    22. var txt = $("#msg").html() + "

      外层div元素被点击.

      "
      ;
    23. $("#msg").html(txt);
    24. event.stopPropagation();
    25. });
    26. //为body元素绑定click事件
    27. $("body").bind("click",function(){
    28. var txt = $("#msg").html() + "

      body元素被点击.

      "
      ;
    29. $("#msg").html(txt);
    30. });
    31. });
    32. script>
    33. head>
    34. <body>
    35. <div id="content">
    36. 外层div元素
    37. <span>内层span元素span>
    38. 外层div元素
    39. div>
    40. <div id="msg">div>
    41. body>
    42. html>

    七、阻止默认行为
    1、使用event.preventDefault()方法来阻止元素的默认行为。

    2、阻止默认行为.html

    1. <html>
    2. <head>
    3. <title>阻止默认行为title>
    4. <style type="text/css">
    5. style>
    6. <script type="text/javascript" src="script/jquery-3.6.0.js">script>
    7. <script type="text/javascript">
    8. $(function(){
    9. $("#sub").bind("click",function(event){
    10. var username = $("#username").val(); //获取元素的值
    11. if (username=="") {
    12. //判断值是否为空
    13. $("#msg").html("

      文本框的值不能为空.

      "
      );
    14. //默认情况下,只要点击了submit,就会提交到action上的地址去
    15. //阻止默认行为
    16. event.preventDefault();
    17. }
    18. });
    19. });
    20. script>
    21. head>
    22. <body>
    23. <form action="http://www.baidu.com">
    24. 用户名:<input type="text" id="username" />
    25. <br/>
    26. <input type="submit" value="提交" id="sub" />
    27. form>
    28. <div id="msg">div>
    29. body>
    30. html>

    八、同时对事件对象停止冒泡和默认行为
    1、使用return false这种简写方式即可。大可不必写上面两句。

    九、常用的事件对象属性
    1、event.type:用于获取到事件类型,比如click等。

    2、event.target:用于获取到事件触发的元素。

    3、event.pageX:获取到光标相对于页面x的坐标。

    4、event.pageY:获取到光标相对于页面y的坐标。

    5、event.which:获取鼠标的左、中、右键,分别为1、2、3。

    6、event.metaKey:键盘事件中获取按键。

    7、事件对象属性.html

    1. <html>
    2. <head>
    3. <title>事件对象属性title>
    4. <style type="text/css">
    5. style>
    6. <script type="text/javascript" src="script/jquery-3.6.0.js">script>
    7. <script type="text/javascript">
    8. $(function(){
    9. /*
    10. $("a").click(function(event){
    11. alert(event.type); //获取事件类型
    12. var tg=event.target; //获取触发事件的事件源
    13. alert(tg.href); //弹出事件源的href属性
    14. alert(event.pageX+"--"+event.pageY); //获取点击位置在浏览器中的x坐标和y坐标
    15. return false;
    16. });
    17. */
    18. //鼠标按下事件
    19. $("a").mousedown(function(event){
    20. alert(event.which);
    21. return false;
    22. });
    23. $("input").keyup(function(event){
    24. alert(event.which); //event.which既可以获得鼠标按键,也可以获得键盘按键
    25. return false;
    26. });
    27. });
    28. script>
    29. head>
    30. <body>
    31. <a href="http://www.baidu.com">点击我a>
    32. <input type="button" value="点击我" />
    33. body>
    34. html>

    十、移除事件
    1、unbind()方法
    格式:

    unbind([type], [bind]);

    说明:
    (1)如果没有参数则删除所有的绑定事件
    (2)如果提供了事件类型作为参数,则只删除该类型的绑定事件
    (3)如果把在绑定时传递的处理函数作为第2个参数,则只有这个特定的事件处理函数被删除

    2、解除绑定事件.html

    1. <html>
    2. <head>
    3. <title>解除绑定事件title>
    4. <style type="text/css">
    5. * {margin:0; padding:0; }
    6. body {font-size:13px; line-height:130%; padding:60px; }
    7. p {width:200px; background:#888; color:white; height:16px; }
    8. style>
    9. <script type="text/javascript" src="script/jquery-3.6.0.js">script>
    10. <script type="text/javascript">
    11. $(function(){
    12. //一个元素可以绑定多个事件
    13. $("#btn").bind("click",myfun1=function(){ //指定函数名称
    14. $("#test").append("

      我的绑定函数1-click

      "
      );
    15. }).bind("mouseout",myfun2=function(){
    16. $("#test").append("

      我的绑定函数2-mouseout

      "
      );
    17. }).bind("click",myfun3=function(){
    18. $("#test").append("

      我的绑定函数3-click

      "
      );
    19. });
    20. //解除绑定
    21. $("#del1").click(function(){
    22. //找到这个按钮
    23. $("#btn").unbind();
    24. //删除之后,再点btn不会有事件绑定!!!相当于bind的代码没有了
    25. })
    26. $("#del2").click(function(){
    27. $("#btn").unbind("mouseout");
    28. })
    29. $("#del3").click(function(){
    30. //删除具有myfun1这个指定函数的click事件
    31. $("#btn").unbind("click",myfun1);
    32. })
    33. });
    34. script>
    35. head>
    36. <body>
    37. <button id="btn">点击我button>
    38. <div id="test">div>
    39. <button id="del1">删除所有事件button>
    40. <button id="del2">删除指定的事件button>
    41. <button id="del3">删除具有指定处理函数的事件button>
    42. body>
    43. html>

    十一、模拟事件操作
    1、以前都是通过用户单击按钮,触发按钮的点击事件。有时候需要在用户进入页面后就触发按钮的点击事件。

    2、在jQuery中,可以使用trigger()方法完成模拟操作。
    例子:

    $("#btn").trigger("click");  //模拟点击事件

    3、触发自定义事件
    例子:

    1. $("#btn").bind("myclick",function(){
    2. //函数体
    3. });
    4. $("#btn").trigger("myclick");

    4、传递数据
    event事件对象自动会传过来
    例子:

    1. $("#btn").bind("myclick",function(event,msg1,msg2){
    2. $("#test").append("

      "+msg1+msg2+"

      "
      );
    3. });
    4. $("#btn").trigger("myclick",["我的自定义","事件"]);

    说明:
    “我的自定义”会赋值给msg1
    “事件”会赋值给msg2

    5、trigger.html

    1. <html>
    2. <head>
    3. <title>triggertitle>
    4. <style type="text/css">
    5. * {margin:0; padding:0; }
    6. body {font-size:13px; line-height:130%; padding:60px; }
    7. p {width:200px; background:#888; color:white; height:16px; }
    8. style>
    9. <script type="text/javascript" src="script/jquery-3.6.0.js">script>
    10. <script type="text/javascript">
    11. $(function(){
    12. /*
    13. $("#btn").bind("click",function(){
    14. $("#test").append("

      我的绑定函数1-click

      ");
    15. }).bind("click",function(){
    16. $("#test").append("

      我的绑定函数2-click

      ");
    17. }).trigger("click"); //模拟自身的click
    18. */
    19. //方式二,简写click()
    20. /*
    21. $("#btn").bind("click",function(){
    22. $("#test").append("

      我的绑定函数1-click

      ");
    23. }).bind("click",function(){
    24. $("#test").append("

      我的绑定函数2-click

      ");
    25. }).click();
    26. */
    27. //触发自定义事件
    28. /*
    29. $("#btn").bind("hao",function(){
    30. alert("hello world");
    31. }).trigger("hao");
    32. */
    33. //传递数据
    34. $("#btn").bind("hao",function(event,msg1,msg2){
    35. alert(msg1+"---"+msg2);
    36. }).trigger("hao",["hello","world"]);
    37. });
    38. script>
    39. head>
    40. <body>
    41. <button id="btn">点击我button>
    42. <div id="test">div>
    43. body>
    44. html>

  • 相关阅读:
    git 丢弃修改 回退版本
    【云原生之Docker实战】使用Docker部署Kavita 个人漫画服务器
    【第二章 SQL-DDL(查询、创建、删除、使用数据库)(查询、创建数据库中的表)】
    八种button的hover效果
    互联网医院系统:数字化时代中医疗服务的未来
    OpenGL ES Windows 搭建环境(MFC版本)
    10月9日,每日信息差
    kubernetes网络模型
    socket编程常用API
    Linux服务器线上优化
  • 原文地址:https://blog.csdn.net/csj50/article/details/126603263