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插件制作 自增长输入框实现代码
Aug 17 jQuery
jQuery树插件zTree使用方法详解
May 02 jQuery
jQuery实现可兼容IE6的淡入淡出效果告警提示功能示例
Sep 20 jQuery
jQuery Validate插件ajax方式验证输入值的实例
Dec 21 jQuery
利用jQuery+localStorage实现一个简易的计时器示例代码
Dec 25 jQuery
基于jquery.page.js实现分页效果
Jan 01 jQuery
jQuery中each方法的使用详解
Mar 18 jQuery
jQuery替换节点元素的操作方法
Mar 18 jQuery
基于jquery实现九宫格拼图小游戏
Nov 30 jQuery
jQuery实现的网站banner图片无缝轮播效果完整实例
Jan 28 jQuery
详解jQuery中的getAll()和cleanData()
Apr 15 jQuery
JQuery常用选择器功能与用法实例分析
Dec 23 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动态柱状图实现方法
2015/03/30 PHP
php获取远程文件内容的函数
2015/11/02 PHP
Laravel框架路由管理简单示例
2019/05/07 PHP
JavaScript写的一个DIV 弹出网页对话框
2009/08/14 Javascript
Knockout text绑定DOM的使用方法
2013/11/15 Javascript
js获取表格的行数和列数的方法
2015/10/23 Javascript
Backbone中View之间传值的学习心得
2016/08/09 Javascript
bootstrap daterangepicker双日历时间段选择控件详解
2017/06/15 Javascript
ES6学习教程之Map的常用方法总结
2017/08/03 Javascript
vue获取DOM元素并设置属性的两种实现方法
2017/09/30 Javascript
使用jQuery给Table动态增加行、清空table的方法
2018/09/05 jQuery
通过vue-cli3构建一个SSR应用程序的方法
2018/09/13 Javascript
Vue 解决路由过渡动画抖动问题(实例详解)
2020/01/05 Javascript
python实现文件分组复制到不同目录的例子
2014/06/04 Python
Python中用于计算对数的log()方法
2015/05/15 Python
Python基础入门之seed()方法的使用
2015/05/15 Python
Python中使用urllib2模块编写爬虫的简单上手示例
2016/01/20 Python
详解K-means算法在Python中的实现
2017/12/05 Python
浅谈Python实现贪心算法与活动安排问题
2017/12/19 Python
对Python 内建函数和保留字详解
2018/10/15 Python
django使用LDAP验证的方法示例
2018/12/10 Python
对python打乱数据集中X,y标签对的方法详解
2018/12/14 Python
Django项目使用ckeditor详解(不使用admin)
2019/12/17 Python
python tkinter GUI绘制,以及点击更新显示图片代码
2020/03/14 Python
Python的控制结构之For、While、If循环问题
2020/06/30 Python
利用Python如何制作贪吃蛇及AI版贪吃蛇详解
2020/08/24 Python
python批量修改交换机密码的示例
2020/09/22 Python
python爬虫scrapy图书分类实例讲解
2020/11/23 Python
经理助理岗位职责
2015/02/02 职场文书
民间借贷被告代理词
2015/05/23 职场文书
Python实现制作销售数据可视化看板详解
2021/11/27 Python
TV动画「神渣☆爱豆」公开第一弹主视觉图
2022/03/21 日漫
Redis安装使用RedisJSON模块的方法
2022/03/23 Redis
Python Numpy库的超详细教程
2022/04/06 Python
vue/cli 配置动态代理无需重启服务的方法
2022/05/20 Vue.js
使用Postman测试需要授权的接口问题
2022/06/21 Java/Android