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 校验中国身份证号码实例详解
Apr 11 jQuery
jquery.form.js异步提交表单详解
Apr 25 jQuery
jQuery动画_动力节点节点Java学院整理
Jul 04 jQuery
用户管理的设计_jquery的ajax实现二级联动效果
Jul 13 jQuery
JQuery和html+css实现带小圆点和左右按钮的轮播图实例
Jul 22 jQuery
jQuery实现checkbox即点即改批量删除及中间遇到的坑
Nov 11 jQuery
JQuery Ajax动态加载Table数据的实例讲解
Aug 09 jQuery
jQuery实现购物车的总价计算和总价传值功能
Nov 28 jQuery
jQuery/JS监听input输入框值变化实例
Oct 17 jQuery
如何解决jQuery 和其他JS库的冲突
Jun 22 jQuery
jQuery实现放大镜案例
Oct 19 jQuery
jQuery+ajax实现文件上传功能
Dec 22 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 mb_substr()函数截取中文字符串应用示例
2014/07/29 PHP
php操作csv文件代码实例汇总
2014/09/22 PHP
Yii2.0中的COOKIE和SESSION用法
2016/08/12 PHP
详解PHP归并排序的实现
2016/10/18 PHP
javascript add event remove event
2008/04/07 Javascript
用jQuery打造TabPanel效果代码
2010/05/22 Javascript
关于document.cookie的使用javascript
2010/10/29 Javascript
JQuery通过Ajax提交表单并返回结果
2011/07/31 Javascript
jQuery源码中的chunker 正则过滤符分析
2012/07/31 Javascript
打开新窗口关闭当前页面不弹出关闭提示js代码
2013/03/18 Javascript
js判断为空Null与字符串为空简写方法
2014/02/24 Javascript
JavaScript 判断一个对象{}是否为空对象的简单方法
2016/10/09 Javascript
JavaScript面向对象分层思维全面解析
2016/11/22 Javascript
React为 Vue 引入容器组件和展示组件的教程详解
2018/05/03 Javascript
浅谈Node.js 沙箱环境
2018/05/15 Javascript
解决vue中post方式提交数据后台无法接收的问题
2018/08/11 Javascript
当vue路由变化时,改变导航栏的样式方法
2018/08/22 Javascript
vue项目中使用Svg的方法
2018/10/24 Javascript
Vue 设置axios请求格式为form-data的操作步骤
2019/10/29 Javascript
js 使用ajax设置和获取自定义header信息的方法小结
2020/03/12 Javascript
jQuery实现中奖播报功能(让文本滚动起来) 简单设置数值即可
2020/03/20 jQuery
vue数据更新UI不刷新显示的解决办法
2020/08/06 Javascript
python实现socket端口重定向示例
2014/02/10 Python
Python中使用logging模块打印log日志详解
2015/04/05 Python
Python下实现的RSA加密/解密及签名/验证功能示例
2017/07/17 Python
python try except 捕获所有异常的实例
2018/10/18 Python
Python实现队列的方法示例小结【数组,链表】
2020/02/22 Python
pycharm如何设置官方中文(如何汉化)
2020/12/29 Python
用CSS3的box-reflect设置文字倒影效果的方法讲解
2016/03/07 HTML / CSS
HTML 5 input placeholder 属性如何完美兼任ie
2014/05/12 HTML / CSS
香港钟表珠宝首饰商城:OneMallTime网摩间
2016/10/14 全球购物
关于梦想的演讲稿
2014/05/05 职场文书
离婚协议书范文2015
2015/01/26 职场文书
社区艾滋病宣传活动总结
2015/05/07 职场文书
Java 常见的限流算法详细分析并实现
2022/04/07 Java/Android
ubuntu开机后ROS程序自启动问题
2022/12/24 Servers