jQuery - 第3天

学习如何基于事件监听提交表单数据,理解 jQuery 插件的本质及实现方法,知道并掌握网页中常见插件的基本用法。

  • 知道如何基于事件监听提交表单
  • 掌握 jQuery 中获取表单数据的方法
  • 了解常见的 jQuery 插件的基本用法
  • 知道如何使用 jQuery 的工具方法
  • 知道如何避免 $ 标识命名冲突

表单

学习 jQuery 中与表单相关的实例方法,知道如何基于事件监听提交表单数据。

表单提交

HTML 标签本身具有数据提交的能力,然而现实中更常见的是通过监听 DOM 事件获取表单的数据,然后通过 Ajax 将表单的数据提交至服务端。

  1. <form>
  2. 昵称: <input type="text" name="nickname">
  3. <br>
  4. 密码: <input type="password" name="password">
  5. <br>
  6. <button>提交</button>
  7. </form>
  8. <script src="your/path/jquery-版本号.min.js"></script>
  9. <script>
  10. // 监听表单的 submit 事件
  11. $('form').submit(function (ev) {
  12. // 表单提交的相关逻辑...
  13. // 阻止 HTML 表单的默认提交
  14. // ev.preventDefault();
  15. // ev.preventDefault() 在 jQuery 中可以
  16. // 被简写成 return false
  17. return false;
  18. })
  19. </script>

总结:

  1. HTML 本身具有提交表单的能力,但是会刷新当前的页面
  2. 通过监听 form 元素的 submit 事件提交表单能够带来较好的用户体验
  3. 用户按回车键或单击提交按钮(type 属性值为 submit)时会触发 formsubmit 事件
  4. jQuery 的事件回调函数中执行 return false 时,相当于执行 ev.preventDefault()

注:button 标签默认的 type 属性为 submit

序列化

HTML 标签默认提交表单时会自动根据表单项的 name 属性将用户在表单中填写的数据提交至服务端,然而采用监听 DOM 事件对表单提交时,需要开发者自行获取表单项中用户填写的数据,其用户如下代码所示:

  1. <form>
  2. 昵称: <input type="text" name="nickname">
  3. <br>
  4. 密码: <input type="password" name="password">
  5. <br>
  6. <button>提交</button>
  7. </form>
  8. <script src="your/path/jquery-版本号.min.js"></script>
  9. <script>
  10. // 监听表单的 submit 事件
  11. $('form').on('submit', function () {
  12. // 通过 jQuery 对象的 serialize 方法,获取所有表单元素的数据
  13. $(this).serialize();
  14. // 阻止表单默认提交
  15. return false;
  16. })
  17. </script>

总结:

  1. val 方法用来获取或设置表单元素的值
  2. serialize 方法用来获取表单中具有 name 属性的表单项中的数据
  3. 调用 serialize 方法获取到的表单数据会被处理 key=val&key1=val1&key2=val2&... 格式的字符串
  4. trim 方法用来清除字符串两端的空白符

注:单选框和复选框表单项的 value 属性省略时默认值为 on

插件

理解 jQuery 插件的本质及实现机制并能编写简单的插件,掌握常见插件的的基本使用。

  • jQuery 功能比较有限,想要更复杂的特效效果,可以借助于 jQuery 插件完成。
  • 这些插件也是依赖于jQuery来完成的,所以必须要先引入jQuery;
  • 常用的网站:

  • 插件使用步骤:

    • 引入相关文件。(jQuery 文件 和 插件文件)
    • 复制相关html、css、js (调用插件)。

瀑布流

4.21-dya3-jQuery - 图1

  • 代码演示:插件的使用三点: 1. 引入css. 2.引入JS 3.引入html。 (有的简单插件只需引入html和js,甚至有的只需引入js)
  • 1.引入css
  1. <!-- 下面的样式代码为页面布局,可以引入,也可以自己写,自己设计页面样式,一般为直接引入,方便 -->
  2. <style type="text/css">
  3. #gallery-wrapper {
  4. position: relative;
  5. max-width: 75%;
  6. width: 75%;
  7. margin: 50px auto;
  8. }
  9. img.thumb {
  10. width: 100%;
  11. max-width: 100%;
  12. height: auto;
  13. }
  14. .white-panel {
  15. position: absolute;
  16. background: white;
  17. border-radius: 5px;
  18. box-shadow: 0px 1px 2px rgba(0, 0, 0, 0.3);
  19. padding: 10px;
  20. }
  21. .white-panel h1 {
  22. font-size: 1em;
  23. }
  24. .white-panel h1 a {
  25. color: #A92733;
  26. }
  27. .white-panel:hover {
  28. box-shadow: 1px 1px 10px rgba(0, 0, 0, 0.5);
  29. margin-top: -5px;
  30. -webkit-transition: all 0.3s ease-in-out;
  31. -moz-transition: all 0.3s ease-in-out;
  32. -o-transition: all 0.3s ease-in-out;
  33. transition: all 0.3s ease-in-out;
  34. }
  35. </style>
  • 2.引入js.
  1. <!-- 前两个必须引入 -->
  2. <script src="js/jquery-1.11.0.min.js"></script>
  3. <script src="js/pinterest_grid.js"></script>
  4. <!-- 下面的为启动瀑布流代码,参数可调节属性,具体功能可参考readme.html -->
  5. <script type="text/javascript">
  6. $(function() {
  7. $("#gallery-wrapper").pinterest_grid({
  8. no_columns: 5,
  9. padding_x: 15,
  10. padding_y: 10,
  11. margin_bottom: 50,
  12. single_column_breakpoint: 700
  13. });
  14. });
  15. </script>
  • 3.引入html.
  1. <!-- html结构一般为事先写好,很难修改结构,但可以修改内容及图片的多少(article标签) -->
  2. <section id="gallery-wrapper">
  3. <article class="white-panel">
  4. <img src="images/P_000.jpg" class="thumb">
  5. <h1><a href="#">我是轮播图片1</a></h1>
  6. <p>里面很精彩哦</p>
  7. </article>
  8. <article class="white-panel">
  9. <img src="images/P_005.jpg" class="thumb">
  10. <h1><a href="#">我是轮播图片1</a></h1>
  11. <p>里面很精彩哦</p>
  12. </article>
  13. <article class="white-panel">
  14. <img src="images/P_006.jpg" class="thumb">
  15. <h1><a href="#">我是轮播图片1</a></h1>
  16. <p>里面很精彩哦</p>
  17. </article>
  18. <article class="white-panel">
  19. <img src="images/P_007.jpg" class="thumb">
  20. <h1><a href="#">我是轮播图片1</a></h1>
  21. <p>里面很精彩哦</p>
  22. </article>
  23. </section>
  • 总结:jQuery插件就是引入别人写好的:html 、css、js (有时也可以只引入一部分,读懂后也可以修改部分内容)

图片懒加载

  • 图片的懒加载就是:当页面滑动到有图片的位置,图片才进行加载,用以提升页面打开的速度及用户体验。

  • 代码演示:懒加载只需引入html 和 js操作 即可,此插件不涉及css。

  • http://www.jq22.com/

4.21-dya3-jQuery - 图2

  • 1.引入js一定放在JQ文件的后面:插件基本上都是这样
  1. <script src="js/EasyLazyload.min.js"></script>
  2. <script>
  3. lazyLoadInit({
  4. // 1.1s
  5. showTime: 1100,
  6. // 函数:监听到图片什么时候加载开始,完毕!
  7. onLoadBackEnd: function(i, e) {
  8. //console.log("onLoadBackEnd:" + i);
  9. },
  10. onLoadBackStart: function(i, e) {
  11. // console.log("onLoadBackStart:" + i);
  12. }
  13. });
  14. </script>
  • 2.引入html:注意修改src,写自定义属性data-lazy-src
  1. <img data-lazy-src="upload/floor-1-3.png" alt="">

全屏滚动

  • 商品宣传:类似PPT大屏展示!

  • 全屏滚动插件比较大,所以,一般大型插件都会有帮助文档,或者网站。全屏滚动插件介绍比较详细的网站为:

  • http://www.dowebok.com/demo/2014/77/

  • 代码演示全屏滚动因为有多重形式,所以不一样的风格html和css也不一样,但是 js 变化不大。所以下面只演示js的引入,html和css引入根据自己实际

  • 项目需要使用哪种风格引入对应的HTML和CSS。

  1. <script src="js/jquery.min.js"></script>
  2. <script src="js/fullpage.min.js"></script>
  3. <script>
  4. $(function() {
  5. $('#dowebok').fullpage({
  6. sectionsColor: ['pink', '#4BBFC3', '#7BAABE', '#f90'],
  7. navigation: true
  8. });
  9. });
  10. </script>
  • 注意:实际开发,一般复制文件,然后在文件中进行修改和添加功能。

日期选择器

在网页中为用户提供方便快捷的日期选择方式,不仅有利于增强用户体验,最重要的是能够保证日期的准确性及统一性,datepicker 提供了良好的选择日期的方式,其用法如下所示:

首先引入 datepicker 插件及配套样式:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>jQuery 日期选择器</title>
  7. <!-- 插件配套的样式 -->
  8. <link rel="stylesheet" href="./assets/datepicker/datepicker.min.css">
  9. </head>
  10. <body>
  11. <script src="./assets/jquery/jquery-3.5.1.min.js"></script>
  12. <!-- 在 jQuery 之后引入插件 -->
  13. <script src="./assets/datepicker/datepicker.min.js"></script>
  14. </body>
  15. </html>

其次调用 datepicker 插件方法,输入框获得焦点时自动弹出日期选择层:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>jQuery 日期选择器</title>
  7. <!-- 插件配套的样式 -->
  8. <link rel="stylesheet" href="./assets/datepicker/datepicker.min.css">
  9. </head>
  10. <body>
  11. <h3>选择日期</h3>
  12. <input type="text" class="datepicker">
  13. <script src="./assets/jquery/jquery-3.5.1.min.js"></script>
  14. <!-- 在 jQuery 之后引入插件 -->
  15. <script src="./assets/datepicker/datepicker.min.js"></script>
  16. <script>
  17. // 调用插件方法
  18. $('.datepicker').datepicker();
  19. </script>
  20. </body>
  21. </html>

通过配置参数能够自定义日期选择的细节,以下是对常用参数的使用说明:

配置参数 含义 备注
language 语言 zh-CN 代表中文
date 默认日期
format 日期显示格式 y 代表年份,m 代表月份,d代表日份
startDate 起始日期
endDate 截止日期

datepicker 默认语言为英文,通过 language 指定其它语言时需要引入对应的语言包(存放在 i18n 目录中),更多的配置参数详见官方文档。

其它

了解 jQuery 的工具方法的使用,知道避免命名冲突和多库共存的解决方法。

工具方法

jQuery 除了封装了大量的 DOM 操作外,还提供了一些工具方法,这些方法通过 $ 或 jQuery 直接调用,如下所示:

  1. 迭代/遍历
  1. let arr = ['html', 'css', 'javascript'];
  2. // 遍历数组,相当于 arr.forEach(function () {})
  3. $.each(arr, function (val) {
  4. console.log(val);
  5. })
  1. 数组转换
  1. // 伪数组
  2. let p = document.querySelectorAll('p');
  3. // 报错,伪数组没有 pop 方法
  4. // p.pop();
  5. // 转换数组,相当于 Array.from(p)
  6. let pArr = $.makeArray(p);
  7. pArr.pop();

jQuery 中还有更多的工具方法,但是 ES6 及更高版本新增的特性正在逐渐替代这些工具方法,因此我们对 jQuery 的方法有个了解即可,推荐采用 ES6 及更高版本的新特性。

多库共存

实际开发中有可能存在同一个网页中引入不同版本 jQuery 的情形,不同版本之间彼此会产生覆盖现象,为了解决这个问题 jQuery 提供了 $.noConflict 方法。

  1. <script src="./assets/jquery/jquery-3.5.1.min.js"></script>
  2. <script>
  3. let _ = $.noConflict();
  4. // 重新命名 jQuery v3.5.1 为全局标识 _
  5. console.log(_.fn.jquery);
  6. </script>
  7. <script src="./jquery-2.2.4.js"></script>
  8. <script>
  9. // jQuery v2.2.4 仍然使用全局标识 $
  10. console.log($.fn.jquery);
  11. </script>

利用 $.noConflict 方法还可以解决与其它类库(也以 $ 作为全局标识命名)全局标识命名冲突的问题。