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插件
Mar 29 jQuery
jQuery动画_动力节点节点Java学院整理
Jul 04 jQuery
jquery+css实现简单的图片轮播效果
Aug 07 jQuery
jQuery绑定事件方法及区别(bind,click,on,live,one)
Aug 14 jQuery
使用jquery的jsonp如何发起跨域请求及其原理详解
Aug 17 jQuery
jQuery实现IE输入框完成placeholder标签功能的方法
Sep 20 jQuery
利用JQUERY实现多个AJAX请求等待的实例
Dec 14 jQuery
jQuery 点击获取验证码按钮及倒计时功能
Sep 20 jQuery
jQuery HTML获取内容和属性操作实例分析
May 20 jQuery
JQuery实现折叠式菜单的详细代码
Jun 03 jQuery
jQuery实现B2B网站后台管理系统侧导航
Jul 08 jQuery
jQuery中event.target和this的区别详解
Aug 13 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使用数组实现队列
2012/02/05 PHP
JQuery.uploadify 上传文件插件的使用详解 for ASP.NET
2010/01/22 Javascript
jquery插件tooltipv顶部淡入淡出效果使用示例
2013/12/05 Javascript
JS的document.all函数使用示例
2013/12/30 Javascript
JS正则表达式验证数字代码
2014/01/28 Javascript
JavaScript数组深拷贝和浅拷贝的两种方法
2014/04/16 Javascript
Jquery实现瀑布流布局(备有详细注释)
2015/07/31 Javascript
微信小程序 wxapp视图容器 view详解
2016/10/31 Javascript
jquery实现点击页面回到顶部
2016/11/23 Javascript
BootStrap Validator对于隐藏域验证和程序赋值即时验证的问题浅析
2016/12/01 Javascript
ES6中参数的默认值语法介绍
2017/05/03 Javascript
Angular.JS内置服务$http对数据库的增删改使用教程
2017/05/07 Javascript
AngularJS通过ng-Img-Crop实现头像截取的示例
2017/08/17 Javascript
JavaScript继承与多继承实例分析
2018/05/26 Javascript
微信小程序当前时间时段选择器插件使用方法详解
2018/12/28 Javascript
vue swipe自定义组件实现轮播效果
2019/07/03 Javascript
微信小程序中网络请求缓存的解决方法
2019/12/29 Javascript
js实现石头剪刀布游戏
2020/10/11 Javascript
JavaScript使用setTimeout实现倒计时效果
2021/02/19 Javascript
python中__slots__用法实例
2015/06/04 Python
python实现微信跳一跳辅助工具步骤详解
2018/01/04 Python
python dataframe向下向上填充,fillna和ffill的方法
2018/11/28 Python
pycharm运行和调试不显示结果的解决方法
2018/11/30 Python
Python实现银行账户资金交易管理系统
2020/01/03 Python
Python连接HDFS实现文件上传下载及Pandas转换文本文件到CSV操作
2020/06/06 Python
Python字符串split及rsplit方法原理详解
2020/06/29 Python
Aerosoles爱柔仕官网:美国舒软女鞋品牌
2017/07/17 全球购物
丝芙兰加拿大官方网站:SEPHORA加拿大
2018/11/20 全球购物
旅游个人求职信范文
2014/01/30 职场文书
关爱女孩行动实施方案
2014/03/13 职场文书
党日活动总结
2014/05/07 职场文书
白血病捐款倡议书
2014/05/14 职场文书
学校党的群众路线教育实践活动个人整改方案
2014/10/31 职场文书
超强台风观后感
2015/06/09 职场文书
小马王观后感
2015/06/11 职场文书
http通过StreamingHttpResponse完成连续的数据传输长链接方式
2022/02/12 Python