js(jquery)解决input元素的blur事件和其他非表单元素的click事件冲突的方法
HTML结构:很简单,就一个input,一个div,能说明问题就OK了; <input type="text" value="默认值"><br/><br/>
<div>搜索</div> 想要实现的结果: 1、input框获取焦点时value为“”,失去焦点时value为“默认值”;-----这个很好实现;
2、当在input框中输入要搜素的内容后,点击div搜索,要求控制台打印输出要搜素的内容(当然每个项目的需求不同,这里只是举个例子),而且要求点击后不影响input的focus和blur行为;----这个才是重点
先看看冲突没有解决之前的效果;
$("input").focus(function () {
    this.value = "";
  }).blur(function () {
    this.value = "默认值";
  });
$("div").click(function () {
    var value = $("input").val();
    console.log(value);
 });
结果:在input中输入“aaaa”,然后点击div,控制台输出的却是“默认值”,与预想的结果不符;
解决方法一:在blur的回调函数中加一个定时器,延迟blur回调函数的执行时间,这样的话虽然在点击div的时候,input的blur行为先被触发,但是由于加了定时器延迟,
所以得等到div的click回调执行完成后才能执行input的blur行为的回调;
$("input").focus(function () {
    this.value = "";
}).blur(function () {
   var self=this;
    setTimeout(function(){
        self.value = "默认值";
    },300)
});
$("div").click(function () {//这部分不变
    var value = $("input").val();
    console.log(value);
 });
结果:在input中输入“aaaa”,然后点击div,控制台输出的却是“aaaa”,符合预想的结果;
解决方法二:将div的click事件改成mousedown事件,因为mousedown行为是鼠标点下去的时候就被触发,而click行为是鼠标点下去再抬起的时候才被触发
$("input").focus(function () {//这部分不变
    this.value = "";
}).blur(function () {
    this.value = "默认值";
});
$("div").mousedown(function () {
    var value = $("input").val();
    console.log(value);
 });
结果:在input中输入“aaaa”,然后点击div,控制台输出的却是“aaaa”,符合预想的结果;
js(jquery)解决input元素的blur事件和其他非表单元素的click事件冲突的方法的更多相关文章
- jQuery获取Select选择的Text(非表单元素)和 Value(表单元素)(转)
		jQuery获取Select选择的Text和Value: 语法解释: . $("#select_id").change(function(){//code...}); //为Sel ... 
- vue中使用对非表单元素使用contenteditable的问题
		先说下问题,再上解决方案: span编辑时有多余空格和回车会影响样式(我用的是span便以此为例) 代码:(有换行符) 效果图: 代码:(无换行符) 效果图: 当在span标签的contentedit ... 
- 关于vue2非表单元素使用contenteditable="true"实现textarea高度自适应
		<template> <div ref="sendContent" contenteditable="true" v-html="s ... 
- 第六十七节,html表单元素
		html表单元素 学习要点: 1.表单元素总汇 2.表单元素解析 本章主要探讨HTML5中表单元素,表单元素用于获取用户的输入数据. 一.表单元素总汇 HTML5的表单中,提供了各种可供用户输入的 ... 
- 前端笔记之React(二)组件内部State&React实战&表单元素的受控
		一.组件内部的State 1.1 state state叫状态,是每一个类式组件都有的属性,但函数式组件,没有state. state是一个对象,什么值都可以定义. 在任何类式组件的构造函数中,可以用 ... 
- html表单元素及表单元素详解
		原文 https://www.jianshu.com/p/b427daa8663d 大纲 1.认识表单 2.认识表单元素 3.表单元素的分类 4.表单元素——文本框 5.表单元素button 6.表单 ... 
- HTML5初步——新的表单元素和属性
		HTML5初步--新的表单元素和属性 HTML5初步--新的表单元素和属性 <!DOCTYPE html> <html> <head> <meta chars ... 
- HTML(三):表单元素
		表单元素概述 表单(Form),用于收集用户信息.提交用户请求等处理过程 1.设计表单,并放入一些输入域 2.网站访问者在自己的计算机上填写上述输入域,并提交到服务器端 ... 
- JavaScript之控制表单元素的值
		表单元素.value 获取表单元素的值 表单元素.value='这是修改后的值' 修改表单元素的值 案例: (1)html <input type="text" id=&qu ... 
随机推荐
- [原创]直播服务器简单实现 http_flv和hls 内网直播桌面
			直播都不陌生了,如今主流的协议分析的对比图,个人见解. 协议 httpflv rtmp hls dash 传输层 http流 tcp流 http http 视频格式 flv flv tag Ts文件 ... 
- 从零开始编写自己的C#框架(3)——开发规范
			由于是业余时间编写,而且为了保证质量,对写出来的东西也会反复斟酌,所以每周只能更新两章左右,请大家谅解,也请大家耐心等待,谢谢大家的支持. 初学者应该怎样学习本系列内容呢?根据我自己的学习经验,一般直 ... 
- 【前端性能】必须要掌握的原生JS实现JQuery
			很多时候,我们经常听见有人说jquery有多快多快.在这个各种类库满天飞的时候,不得不说的是,能有原生JS快吗? 是的,明显原生JS要更快,因为诸如JQuery这样的库必须要兼容各种浏览器和低版本和许 ... 
- Shell脚本一枚
			脚本如下: #!/bin/bash dir=$1 dir1="" for file in `find $dir -type f` do dir2=${file%/*} name=$ ... 
- 巧用css提高浏览器兼容性
			body,div,ul,ol,li,dl,dt,dd,h1,h2,h3,h4,h5,h6,form,input,textarea,p{ margin:0px; padding:0px; font-si ... 
- 让你的Mac支持NTFS
			前段时间换成Mac电脑之后,发现有一点不爽,不能在Mac下写入NTFS格式的磁盘,所以就去研究了一下. 解决方法有如下三种. 第一种,直接使用第三方软件,如Paragon NTFS for MAC,T ... 
- Unicode与JavaScript详解
			本文为转载内容 一.Unicode是什么? Unicode源于一个很简单的想法:将全世界所有的字符包含在一个集合里,计算机只要支持这一个字符集,就能显示所有的字符,再也不会有乱码了. 它从0开始,为每 ... 
- Pointer is missing a nullability type specifier (__nonnull or __nullable)
			我们都知道在swift中,可以使用!和?来表示一个对象是optional的还是non-optional,如view?和view!.而在Objective-C中则没有这一区分,view即可表示这个对象是 ... 
- Linux:Ubuntu16.04下创建Wifi热点
			Linux:Ubuntu16.04下创建Wifi热点 说明: 1.Ubuntu16.04里面可以直接创建热点,而不用像以前的版本,还要其他辅助工具. 2.本篇文章转载自编程人生 具体步骤如下: 1. ... 
- Oracle手边常用命令及操作语句
			Oracle手边常用命令及操作语句 作者:白宁超 时间:2016年3月4日11:24:08 摘要:日常使用oracle数据库过程中,常用脚本命令莫不是用户和密码.表空间.多表联合.执行语句等常规操作. ... 
