vue怎么不通过dom操作获取dom节点
今天写一个公众号的项目,写了一个vue的搜索组件,点击搜索框时,背景出现一个遮罩,代码结构如下:
template:`<div class="searchBar-div">
<input v-model="keyWord"
@keyup.enter='startSearch()'
class="searchBar-input"
type="search"
placeholder="搜索"
/>
<div class="searchBar-mask"
></div>
</div>`,
但是问题出现了,在手机端测试的时候发现,点击遮罩或者点击手机软键盘上的确定都无法使搜索框失焦,遮罩和软键盘都无法消失,只有点击软键盘上的完成或者“▽”符号(打不出那个符号,大家懂就好/捂脸),遮罩和软键盘才能消失。
那么如何使搜索框失焦呢?
当然,如果去操作dom,给遮罩层“searchBar-mask”绑定click事件,点击它的时候,再通过dom操作,使input失焦就解决问题了。
但是,整个项目没有用到jq,也没有用到dom操作,也不想因为这么一个小问题引进jq或者dom操作,只好另辟蹊径。
查资料啊文档啊,最后发现了ref属性还有vue的$emit,ref属性可以使代码可以获取到当前的dom节点,$emit可以是一个发射器,可以向自定义的事件发射信息,就有了一个思路,点击遮罩的时候,向一个自定义的事件发射信息,在搜索框监听这个自定义事件,收到信息后用ref属性获取当前的dom节点,使其失焦,完成!
最后的代码:
var searchBarComponent = {
template:`<div class="searchBar-div">
<input v-model="keyWord"
@keyup.enter='startSearch()'
v-on:search-blur="this.$refs.input.blur();"
class="searchBar-input"
type="search"
placeholder="搜索"
ref="input"
/>
<div class="searchBar-mask"
@click="searchBlur"
></div>
</div>`,
data:function(){
return{
keyWord:'',
}
},
methods: {
startSearch: function startSearch() {
this.$refs.input.blur();
console.log('Do Check'+this.keyWord);
this.$emit('searcher-key-word',this.keyWord);
},
searchBlur:function(){
this.$emit('search-blur');
}
}
}
template:`<div class="searchBar-div"> <input v-model="keyWord" @keyup.enter='startSearch()' v-on:search-blur="this.$refs.input.blur();" class="searchBar-input" type="search" placeholder="搜索" ref="input" /> <div class="searchBar-mask" @click="searchBlur" ></div> </div>`,
vue怎么不通过dom操作获取dom节点的更多相关文章
- javascript的DOM操作获取元素
一.document.getElementById() 根据Id获取元素节点 <div id="div1"> <p id="p1"> ...
- dom操作------获取元素的若干方法
// 1,getElementById:返回元素节点document.getElementById(); // 2,getElementsByClassName:返回HTMLCollection对象( ...
- jQuery-1.9.1源码分析系列(十一) DOM操作续——克隆节点
什么情况下使用到克隆节点? 我们知道在对DOM操作过程中如果直接使用节点会出现节点随操作而变动的情况.比如对节点使用.after/.before/.append等方法后,节点被添加到新的地方,原来的位 ...
- 【学亮IT手记】jQuery DOM操作-获取内容和属性
jQuery拥有可操作HTML元素和属性的强大方法. 其中非常重要的部分就是操作DOM的能力. DOM--文档对象模型. <!DOCTYPE html> <html> < ...
- js dom操作获取节点的一些方法
在复习javascript基础的时候,整理了一下js中获取节点的一些常用的方法,见代码: //js获取下一个兄弟节点 function getNextSibling(eleObj){ var next ...
- dom操作------获取长/宽/距离等值的若干方法
1.offsetLeft:获取元素边框以外至文档顶的距离:若其祖先元素有定位属性position则返回值为元素到该定位元素的距离,不包括祖先元素的三宽(padding,border,margin),且 ...
- JavaScript的DOM操作获取元素的大小
通过 style 内联获取元素的大小 需要注意的是style 获取只能获取到行内 style 属性的 CSS 样式中的宽和高,如果有获取:如果没有则返回空. <!DOCTYPE html> ...
- JavaScript的DOM操作获取元素实际大小
clientWidth 和 clientHeight 这组属性可以获取元素可视区的大小,可以得到元素内容及内边距所占据的空间大小. 返回了元素大小,但没有单位,默认单位是 px,如果你强行设置了单位, ...
- JavaScript的DOM操作获取元素周边大小
一.clientLeft 和 clientTop 这组属性可以获取元素设置了左边框和上边框的大小,目前只提供了 Left 和 Top 这组,并没有提供 Right 和 Bottom. <scri ...
随机推荐
- height百分比失效
heigh:100%失效 解决方案: 第一种 html, body { height: 100%; } 第二种 div { height: 100%; position: absolute; } 非定 ...
- Jquery中$与$.fn的区别
Jquery中$与$.fn的区别 当今web开发往往离不开Jquery的使用,Jquery以其简洁的使用方式.良好的浏览器兼容性赢得了软件研发同行的青睐,作为其中的一员,自然也不例外,尽管刚开始时很排 ...
- Mysql压缩版forWindows安装与配置
参考:http://blog.csdn.net/wengengeng/article/details/52013650
- hdu2044 一只小蜜蜂
和之前的楼梯题一样,递推求解 但是要注意这里可以到50,结果已经超出了Int的范围,所以要用64位保存 #include<iostream> #include<cmath> # ...
- CentOS-Linux系统下安装Tomcat
步骤1:解压Tomcat 命令: unzip apache-tomcat-8.5.20.zip 步骤2:将tomcat 移动到“/usr/local/src/java/tomcat8.5”下并重命名 ...
- 【Chromium】GPU进程启动流程
本篇文档以gpu进程的创建和启动为例,讲述chormium如何启动一个browser进程的子进程 PS:本文使用的chromium代码版本为71 前言 GPU进程的启动时机是由browser进程负责的 ...
- RegExp使用技巧
正则表达式 //用法 1. /\d/g 2. new RegExp('/\d/','g') //修饰符 g,i,m //元字符 1.元字符是在正则表达式中有特殊含义的非字母字符 . * + ? $ ^ ...
- Tinymce 编辑器添加自定义图片管理插件
在使用Tinymce的过程中需要用到图片上传功能,而提供的上传插件在上传文件后是给了一个连接地址,就想用户需要什么图片,不能用最直观的方式表现出来么! 虽然官网上也有一个文件管理的插件moxieman ...
- 解决Windows资源管理器右键菜单打开EditPlus容易导致资源管理器无响应问题
这个问题确实很烦人,经常导致 资源管理器无响应,关闭后整个资源管理器彻底崩溃,原因未知.本着折腾和强迫症精神,这个问题一定要解决.方法如下: 1.不要用EditPlus自带的添加到系统右键菜单选项. ...
- String和StringBuffer有什么区别
首先,String和StringBuffer主要有2个区别: (1)String类对象为不可变对象,一旦你修改了String对象的值,隐性重新创建了一个新的对象,释放原String对象,StringB ...