Vue项目中使用jquery的简单方法


Posted in jQuery onMay 16, 2019

前言

在vue项目中,需要实现某些特定的功能时,使用mvvm模式不易实现。因此引入jquery包来完成需求

jquery中的触发事件可以自己定义在mounted中,如果需要使用vue中data的数据,直接使用this.msg是无法使用的,需要另外定义const _this = this,

存储this.之后便可以在事件中使用_this.msg数据了。

需求:在品牌处可以输入,并且会有模糊搜索的下拉框,也可下拉选择,在输入完毕后检验值是否在下拉框中存在,聚焦时蓝色边框,change时如果不存在则红框显示,存在的话就绿框提示,(就是带输入建议的输入框)

问题: 使用element-ui中的el-autocomplete组件,开始通过失焦事件来验证,但是如果选择了下拉框某个值时(选中后会将下拉框的值赋给上面的输入框),失焦事件触发会在赋值之前,因此拿失焦时输入框的值来进行判断时错误的,在先改变输入框的值后再去选择下拉框,change事件有同样的bug,没办法只能自己引入jquery来完成

Vue项目中使用jquery的简单方法Vue项目中使用jquery的简单方法

点击输入框后,通过placeholder判断是否是品牌下的的输入框,因为每个输入框都有这个类,如果是的话则增加一个类名,如果第一次点击的位置和第二次鼠标点击的位置都是品牌下的输入框,则执行相应的逻辑判断,

在逻辑执行完后就删除其他处同样的类名inputList

const _this = this 
$('body').delegate('.el-input__inner', 'focus', function(e) { // 因为是动态生成的,所以选择这种方式来监听事件
   if (e.target.placeholder === '请输入品牌') { // 当聚焦在品牌输入框时触发
    $(this).addClass('inputList') // 加上一个类名inputList
    if ($('.inputList').length === 2) { // 判断下一次点击的位置,当从第一个输入框改值后下一个聚焦位置还是品牌下的输入框时
     if (!$('.inputList').not(this).val()) {
      $('.inputList').not(this).css('border', '1px solid #67c23a')
     } else {
      let num = 0
      for (let j = 0; j < _this.goodsBrands.length; j++) {
       if ($('.inputList').not(this).val() === _this.goodsBrands[j].value) {
        num += 1
        break
       }
      }
      if (num === 0) {
       _this.$message.error('输入的品牌不在品牌列表中')
       $('.inputList').not(this).css('border', '1px solid #F56C6C')
      } else {
       $('.inputList').not(this).css('border', '1px solid #67c23a')
      }
     }
    }

    $('.el-input__inner').not(this).removeClass('inputList') // 逻辑执行完之后删除当前聚焦位置以外的inputList类,这样就保持.inputList长度最多为2
   }
  })

此处是为了模拟出输入框的change事件,因为在聚焦时会添加inputList这个类名。所以这里可以判断是否是自己想要的位置,如果是的话给一个标志位getindex,当点击到品牌下的输入框时,如果第二次的点击位置不是品牌其他位置的输入框,则进行逻辑判断

$(document).click(function(e) { // focus触发时也会触发这个事件,并且触发在focus事件之后
   if (e.target.classList[1] === 'inputList') { // 判断是否点击在对应位置
    _this.getIndex = 1 // 用于标志在聚焦事件触发后的下一次点击是否同样会触发聚焦,如果是则把第二次点击当成第一次重新判断,等到下一次点击再来判断
   } else {
    if (_this.getIndex === 1) { 
     if (!$('.inputList').eq(0).val()) {
      $('.inputList').eq(0).css('border', '1px solid #67c23a')
     } else {
      let num = 0
      for (let j = 0; j < _this.goodsBrands.length; j++) {
       if ($('.inputList').eq(0).val() === _this.goodsBrands[j].value) {
        num += 1
        break
       }
      }
      if (num === 0) {
       _this.$message.error('输入的品牌不在品牌列表中')
       $('.inputList').eq(0).css('border', '1px solid #F56C6C')
      } else {
       $('.inputList').eq(0).css('border', '1px solid #67c23a')
      }
     }
     $('.el-input__inner').removeClass('inputList')
     _this.getIndex = 0 // 每次第二次点击了其他位置时,getIndex重新计数
    }
   }
  })

小白一枚,如果有其他更好的方法,欢迎各位同行指教,多多交流

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。

jQuery 相关文章推荐
jquery ui sortable拖拽后保存位置
Apr 27 jQuery
jQuery正则验证注册页面经典实例
Jun 10 jQuery
jQuery修改DOM结构_动力节点Java学院整理
Jul 05 jQuery
jQuery条件分页 代替离线查询(附代码)
Aug 17 jQuery
使用vue与jquery实时监听用户输入状态的操作代码
Sep 19 jQuery
jQuery实现所有验证通过方可提交的表单验证
Nov 21 jQuery
使用Ajax和Jquery配合数据库实现下拉框的二级联动的示例
Jan 25 jQuery
jQuery AJAX 方法success()后台传来的4种数据详解
Aug 08 jQuery
JQuery实现ajax请求的示例和注意事项
Dec 10 jQuery
Jquery 动态添加元素并添加点击事件实现过程解析
Oct 12 jQuery
JQuery中的常用事件、对象属性与使用方法分析
Dec 23 jQuery
jQuery实时统计输入框字数及限制
Jun 24 jQuery
JQuery常见节点操作实例分析
May 15 #jQuery
JQuery属性操作与循环用法示例
May 15 #jQuery
jquery+css实现Tab栏切换的代码实例
May 14 #jQuery
jquery实现二级导航下拉菜单效果实例
May 14 #jQuery
JQuery获取可视区尺寸和文档尺寸及制作悬浮菜单示例
May 14 #jQuery
jquery 验证用户名是否重复代码实例
May 14 #jQuery
JQuery获取元素尺寸、位置及页面滚动事件应用示例
May 14 #jQuery
You might like
php 字符过滤类,用于过滤各类用户输入的数据
2009/05/27 PHP
PHP 文件编程综合案例-文件上传的实现
2013/07/03 PHP
php中创建和调用webservice接口示例
2014/07/25 PHP
CentOS6.5 编译安装lnmp环境
2014/12/21 PHP
PHP实现生成唯一会员卡号
2015/08/24 PHP
php实现的AES加密类定义与用法示例
2018/01/29 PHP
汉化英文版的Dreamweaver CS5并自动提示jquery
2010/11/25 Javascript
javascript 学习笔记(六)浏览器类型及版本信息检测代码
2011/04/08 Javascript
js AppendChild与insertBefore用法详细对比
2013/12/16 Javascript
JavaScript获取table中某一列的值的方法
2014/05/06 Javascript
javascript实现类似java中getClass()得到对象类名的方法
2015/07/27 Javascript
vue.js计算属性computed用法实例分析
2018/07/06 Javascript
解决vue.js this.$router.push无效的问题
2018/09/03 Javascript
JavaScript解析及序列化JSON的方法实例分析
2019/01/04 Javascript
vue的for循环使用方法
2019/02/12 Javascript
JS实现普通轮播图特效
2020/01/01 Javascript
python判断图片宽度和高度后删除图片的方法
2015/05/22 Python
Python文本相似性计算之编辑距离详解
2016/11/28 Python
Python IDLE 错误:IDLE''s subprocess didn''t make connection 的解决方案
2017/02/13 Python
Python流行ORM框架sqlalchemy安装与使用教程
2019/06/04 Python
Python3 文章标题关键字提取的例子
2019/08/26 Python
浅析使用Python搭建http服务器
2019/10/27 Python
解决Jupyter notebook更换主题工具栏被隐藏及添加目录生成插件问题
2020/04/20 Python
Python Tornado核心及相关原理详解
2020/06/24 Python
Python JSON常用编解码方法代码实例
2020/09/05 Python
matplotlib绘制正余弦曲线图的实现
2021/02/22 Python
使用HTML5 IndexDB存储图像和文件的示例
2018/11/05 HTML / CSS
意大利巧克力店:Chocolate Shop
2019/07/24 全球购物
英语演讲稿范文
2014/01/03 职场文书
幼儿园运动会入场词
2014/02/10 职场文书
企业演讲稿范文大全
2014/05/20 职场文书
人口与计划生育目标管理责任书
2014/07/29 职场文书
初中同学会活动方案
2014/08/22 职场文书
Python竟然能剪辑视频
2021/05/25 Python
通过T-SQL语句创建游标与实现数据库加解密功能
2022/03/16 SQL Server
win10以太网连接不上怎么办?Win10连接以太网详细教程
2022/04/08 数码科技