js事件与jQuery
一、js获取用户输入
# 在css中获取用户输入可以是form表单的input、option、textarea js中获取用户输入数据 普通数据(输入、选择): 标签对象.value 文件数据(上传) 标签对象.file # 这种只能获取到文件的路径地址 标签对象.files[0] # 获取到文件的对象
二、js类属性操作
标签对象.classList # 获取所有的标签对象所有的类属性 标签对象.classList.contains() # 判断标签是否有指定的属性 标签对象.classList.add() # 添加属性 标签对象.classList.remove() # 删除属性 标签对象.classList.toggle() # 标签中有该属性就删除 没有就添加
三、样式操作
# 样式操作应该是由css编写 不应该有js编写 所以尽量不要用js去操作标签的样式 当我们查找标签后 在得到一个标签对象之后 我们就可以操作了 标签对象.style.标签样式属性名 eg: divEle.style.backgroudColor = 'red' # 该标签的背景色就被修改了
四、事件
''' 事件: 事件就像是当标签达到某个条件的时候 自动触发js代码运行 eg:当用户点击一个按钮 自动弹出警示框 ''' 绑定事件的两种方式: # 方式1:提前写好函数 在标签内直接绑定 <input type="button" value="点我" onclick="func1()"> <script> function func1(){ alert('是男人') } </script>
# 方式2:先查找标签 然后可以批量绑定 <button id="d1">点击</button> <script> let btnEle = document.getElementById('d1') btnEle.onclick = function () { alert('弹出框') } </script>
# 事件中的关键字this <button id="d1">点击</button> <script> let btnEle = document.getElementById('d1') btnEle.onclick = function () { alert('321') console.log(this) } </script> # this指代的是当前被操作的标签对象
1.事件的补充
onclick 当用户点击某个对象时调用的事件句柄。 ondblclick 当用户双击某个对象时调用的事件句柄。 onfocus 元素获得焦点。 // 练习:输入框 onblur 元素失去焦点。 应用场景:用于表单验证,用户离开某个输入框时,代表已经输入完了,我们可以对它进行验证. onchange 域的内容被改变。 应用场景:通常用于表单元素,当元素内容被改变时触发.(select联动) onkeydown 某个键盘按键被按下。 应用场景: 当用户在最后一个输入框按下回车按键时,表单提交. onkeypress 某个键盘按键被按下并松开。 onkeyup 某个键盘按键被松开。 onload 一张页面或一幅图像完成加载。 onmousedown 鼠标按钮被按下。 onmousemove 鼠标被移动。 onmouseout 鼠标从某元素移开。 onmouseover 鼠标移到某元素之上。 onselect 在文本框中的文本被选中时发生。 onsubmit 确认按钮被点击,使用的对象是form。
五、事件案列
<!--1.数据校验 获取用户名和密码 校验是否符合 并展示相应提示 给普通按钮绑定一个点击事件 触发校验动作 --> <p> username:<input type="text" id="username"> <span style="color:red" id="d1"></span> </p> <p> username:<input type="text" id="password"> <span style="color:red" id="d2"></span> </p> <input type="button" id="btn" value="提交"> <script> // 给按钮绑定一个点击事件 // 1.先查找按钮标签 let btnEle = document.getElementById('btn') // 2.绑定点击事件 btnEle.onclick = function () { // 3.获取用户名和密码 let userNameVal = document.getElementById('username').value; let passWordVal = document.getElementById('password').value; // 判断用户名是否为jsaon if (userNameVal === 'jason'){ // 4.查找span标签 let span1Ele = document.getElementById('d1') // 给span标签添加文本内容 span1Ele.innerText = '用户名不能为jason' } // 判断密码是否为空 if (passWordVal.length === 0){ let span2Ele = document.getElementById('d2') // 给span标签添加文本内容 span2Ele.innerText = '密码不能为空' } } </script> <!--是要点击提交按钮 就判断用户的输入是否符合-->
省份:<select name="" id="province"> </select> 市区: <select name="" id="city"> </select> <script> let data = { "河北": ["廊坊", "邯郸"], "北京": ["朝阳区", "海淀区"], "山东": ["威海市", "烟台市"], "安徽": ["芜湖", "合肥"], "上海": ["浦东新区", "青浦区"], "深圳": ["宝安", "龙华"] }; // 查找省份标签 let proEle = document.getElementById('province') let cityEle = document.getElementById('city') // 循环提取省份 for (pro in data){ // 创建option标签 let opEle = document.createElement('option') // 在option添加省份 opEle.innerText = pro // 将option标签创建value属性 opEle.setAttribute('value', pro) // 将option标签添加到第一个select标签中 proEle.append(opEle) } // 给省份标签添加事件 proEle.onchange = function () { // 每次给下拉框添加市区信息前 应该把之前的数据清空 cityEle.innerText = '' // 获取用户选择的省份信息 let proVal = this.value; // 获取省份对应的市区信息 let cityVal = data[proVal] // 循环获取市区信息 for (let i = 0; i < cityVal.length; i++) { // 创建option标签 let opEle = document.createElement('option') // 添加市区信息 opEle.innerText = cityVal[i] // 创建option标签value属性 opEle.setAttribute('value', cityVal[i]) // 添加到第二个select标签 cityEle.append(opEle) } } <!--用户选择省份的时候市区先显示对应的市区名称-->
六、jQuery简介
'''基本简绍''' 1.兼容多浏览器 IE浏览器:很多时候针对IE浏览器前端需要重新写一份代码操作 2.封装了js代码 核心代码也就几十KB 加载速度块 极大的提升编写效率 3.宗旨 ''' Write less, do more 写的更少,做的更多 ''' '''版本区别''' 1.x 兼容IE678 2.x 不兼容IE678 3.x 不兼容IE678 '''下载使用''' 下载地址:https://jquery.com/ 中文文档:http://jquery.cuishifeng.cn/ jQuery必须先导入才可以使用(html页面上得写导入语句>>>:容易忘) jQuery本身就是一个js文件 里面写了一些js代码而已 '''导入方式''' 1.本地jQuery文件 不会受到网络影响 2.CDN加速服务 需要确保互联网 min.js 压缩之后的文件 容量更小 .js 没有压缩之后的文件 容量稍大 '''基本使用''' 将页面上的两个p标签文本内容一个而变成红色 一个变成蓝色 原生js代码 let p1Ele = document.getElementsByTagName('p')[0] let p2Ele = document.getElementsByTagName('p')[1] undefined p1Ele.style.color = 'red' 'red' p2Ele.style.color = 'blue' 'blue' # 原生js代码要先查找页面上的标签 然后才能通过改标签点style改变样式 jQuery代码 $('#d1').css('color', 'red').next().css('color','bule') # jQuery可以一行代码搞定
七、jQuery基本使用
''' 本来使用jQuery应该是在括号前面加上 jQuery()但是觉得太麻烦就变成了$符 jQuery() >>>: $() ''' '''基本选择器''' $('#d1') # id选择器 $('.c1') # 类选择器 $('p') # 标签选择器 # 配合使用 $('div.c1') # 找到有c1 class类的div标签 # 组合选择器 $('#d1,.c1,p') # 层级选择器: x和y可以为任意选择器 $("x y"); # x的所有后代y(子子孙孙) $("x > y"); # x的所有儿子y(儿子) $("x + y") # 找到所有紧挨在x后面的y $("x ~ y") # x之后所有的兄弟y
1.jQuery查找标签与js的区别
# jQuery和js查找标签的结果: 结果集都是数组但是功能有区别 1.如果使用索引取值 那么都是标签对象 标签对象是无法调用jQuery提供的方法的 2.标签对象如果想转换成jQuery对象需要使用 $() 转换成jQuery对象的目的是为了使用jQuery提供的更多方法 eg: $('p')[0] # 现在已经是标签对象了 不能调用jQuery的方法 $('p')[0].css('color','red') # 因为.css是jQuery的方法所以会报错 $('p')[0].style.color = 'red' # 因为.style是原生js方法所以可以调用 red $('p').first() # 这个还是jQuery对象 $('p').first().css('color','red') # 因为.css是jQuery的方法所以不会报错 jQuery.fn.init [p, prevObject: jQuery.fn.init(2)] # 标签对象 $('p').first().style.color = 'green' # 因为.style是原生js方法所以会报错 $($('p')[0]).css('color','orange') # 因为最外面一层还是jQuery对象所以不会报错 jQuery.fn.init [p] ''' 所以标签对象只能调用原生js方法 jQuery对象只能调用jQuery方法 不能乱窜 '''
2.基本筛选器
$('ul li:first') # 第一个 $('ul li:last') # 最后一个 $('ul li:eq(index)') # 索引等于index的那个元素 $('ul li:odd') # 匹配所有索引值为奇数的元素,从 0 开始计数 $('ul li:even') # 匹配所有索引值为偶数的元素,从 0 开始计数 $('ul li:gt(index)') # 匹配所有大于给定索引值的元素 $('ul li:lt(index)') # 匹配所有小于给定索引值的元素 $('ul li:not(li)') # 移除所有满足not条件的标签 $('ul:has(#d1)') # 查看内部含有id是d1的ul标签 id是从ul的后代是否存在 存在才会找ul
3.表单选择器
# form表单下的标签有许多的属性 快速查找可以用属性查找 但是这个只能是form表单下查找 可以看成是属性选择器优化而来 注意:$(':checked') # 这个可以把默认属性都找出来 但是也会把option的默认属性找出来 $('input:checked') # 所以想要精确查找可以在前面加上input标签 :text :password :file :radio :checkbox :submit :reset :button :enabled :disabled # 隐藏属性 :checked :selected
八、作业
1.定时
<!-- 有一个input框 两个按钮 一个开始 一个结束 1.点击开始按钮 input内展示当前时间并按秒数刷新 2.点击结束按钮 input内展示停止--> <p><input type="text" id="time"></p> <input type="button" value="开始" id="start"> <input type="button" value="停止" id="stop"> <script> // 先查找三个标签 let timeEle = document.getElementById('time') let startEle = document.getElementById('start') let stopEle = document.getElementById('stop') // 把时间放到input框展示 function time() { // 获取时间 let timeVal = new Date() // 将获取到的时间添加到input框中 timeEle.value = timeVal.toLocaleString() } // 定义一个时间对象 let timeObj = null // 给开始按钮绑定事件 startEle.onclick = function () { if (!timeObj) { // 要执行循环展示时间之前应该定义一个时间对象 在判断时间对象有没有值 没有值才可以循环 要不然一直点击开始按钮 就停止不下来了 // 循环展示时间 timeObj = setInterval(time, 1000) } } // 给停止按钮绑定事件 stopEle.onclick = function (){ // 取消循环任务 clearInterval(timeObj) // 取消完之后要给时间对象变为false timeObj = '' } </script>
2.搜索框
<!--input内有默认的文本值 用户一旦选择该input想做内容修改 就提前把内容清空--> <input type="text" id="d1" value="jason"> <script> let inpEle = document.getElementById('d1') // 给输入框绑定事件 inpEle.onfocus = function (){ // 让内容清空 this.value = '' } </script>