搜索提示時jquery的focusout和click事件沖突問題完美解决
|
在主流的搜索引擎上搜索時,輸入內容,往往會彈出智能提示。輸入框为input,智能提示區域为suggest。接下來一般有兩種操作: 1.選擇某一提示,則把內容复制到input中,自動關閉suggest; 2.點擊網頁其他地方,自動關閉suggest。
實現第一個可以用click事件,在suggest中增加鼠標click事件,在處理中將點擊的內容寫到input中,然後關閉suggest。單獨測試無問題; 實現第二個可以在input元素上增加focusout事件或者blur事件,在input中丟失焦點的時候,關閉suggest。單獨測試無問題。
但是放在一起的時候,就會出現問題,只響應了丟失焦點事件(關閉了suggest),卻沒有響應內容點擊事件(沒有獲取點擊的suggest內容)。 不明白为什麼會沖突,在網上搜,也搜到了一些同样的問題,有人建議使用blur,但是blur跟focusout是一样的道理,都不行。
思前想後,忽然想到click事件的觸發條件,你點擊一個按鍵,觸發一次點擊事件,而一次點擊包括:鼠標點下去,鼠標松開。而jquery的click事件是鼠標松開後才觸發的(事實上button元素和href元素的點擊事件都是這样),這样一想就明白剛剛出現的沖突問題了,你點中suggest中的某一提示,這時候input丟失焦點事件觸發,關閉了suggest區域,而這個時候你的鼠標才松開(電腦反應速度要快於鼠標點擊松開速度),完成點擊,但此時鼠標已經不在suggest要選擇的提示上面了,所以也就無法觸發suggest裏的點擊事件。
想明白了這點,問題就好解决了,把suggest中的響應事假改成mousedown,這样在鼠標點的時候就會觸發,測試了一下,果然成功了,mousedown事件和focusout事件都得到了正確處理。 //input的丟失焦點事件
將click換成mousedown就完全ok了,簡單到我都不好意思說,但是有的時候,也不容易想到哇!
另外,在網上還找到了別的方法,一個是 $("#input_area").keypress(function() {
這種方法用隱藏動畫造成了延遲,使得suggest區域的click事件可以觸發。但是slide可不适應所有情況,而且把功能成功與否建立在動畫隱藏的速度快慢上,個人覺得也不太合适。
另一種方法是將input和suggest用一個div包起來,事件直接加在div上面。這個未測試過,不過理論上應該也是可行的。 |
搜索提示時jquery的focusout和click事件沖突問題完美解决的更多相关文章
- jquery href属性和click事件冲突
a标签的定义如下: <a href="javascript:void(0);">test</a> jquery中的click事件: $("a&qu ...
- 轉:Jquery绑定img的click事件
用JQUERY给IMG element绑定click事件的时候,直接用img.click(function(){...})不起作用,如下面代码$("img.ms-rteImage-Light ...
- 重载jquery on方法实现click事件在移动端的快速响应
额,这个标题取的还真是挺装的... 其实我想表达的是jquery click事件如何在移动端自动转换成touchstart事件. 因为移动端click事件会比touchstart事件慢几拍 移动设备某 ...
- 关于jquery中on绑定click事件在苹果手机失效的问题
用一个div当做了一个按钮来使用. <div class="button"> <div class=" next_button button_left ...
- jquery中on绑定click事件在苹果手机失效的问题
因为是动态添加的内容,所以想要使用click事件,需要给他用on绑定一下: $(document).on("click",".next_button",func ...
- 关于jquery中on绑定click事件在苹果手机失效的问题(巨坑啊)
用一个div当做了一个按钮来使用. <div class="button"> <div class=" next_button button_left ...
- JQuery不能加载click事件的问题
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...
- jquery给label绑定click事件被触发两次解决方案
首先我们看下面的代码片段(label包裹checkbox) <div class="example"><label for="chk_6" c ...
- jquery中on绑定click事件在苹果手机中不起作用
写一个div当做了一个按钮来使用. <div class="button"> <div class="sure"> 确定 </di ...
随机推荐
- Linux安装Jdk,CentOS安装Jdk
Linux安装Jdk,CentOS安装Jdk >>>>>>>>>>>>>>>>>>>& ...
- HTML+CSS基础学习笔记(7)
CSS布局模型 在网页中,元素有三种布局模型: 1.流动模型(Flow) 2.浮动模型(Float) 3.层模型(Layer) 一.流动模型 流动(Flow)是默认的网页布局模型,网页在默认状态下的H ...
- 30、ADO.NET、事务、DataSet
ADO.NET ADO.NET是一组用于和数据源进行交互的面向对象类库.通常数据源是数据库,但也可以是文本文件.Excel表格.XML文件. 说白了就是使用.net操作数据库的一套类库. ADO.NE ...
- jquery获得select option的值 和对select option的操作【转藏】
获取Select : 获取select 选中的 text : $("#ddlRegType").find("option:selected").text(); ...
- 在解决方案中添加Layout,Image文件夹
在解决方案中添加文件夹如Layout,Image,可以使用映射的方式(右键该解决方案,添加对Layout的映射),这样IIS的地址和该文件夹就绑定了:拖该文件夹中的 文件时,显示的就是该文件在IIS中 ...
- 在fragment中调用SharedPreferences
[o] Activity中调用SharedPreferences的方式: String prefsName = "mysetting"; SharedPreferences pre ...
- 初学HTML5系列一:简单介绍
最近很闲,就想着学点东西,然后就瞄中了html5,以前只看过很简单的一些,这次是系统的学下,顺便也记录下.废话不多说,开始正题. 稍微介绍下html5,html5是W3C和WHATWG 合作的结果. ...
- 带参数的查询防止SQL注入攻击
把单引号替换成两个单引号,虽然能起到一定的防止SQL注入攻击的作用,但是更为有效的办法是把要拼接的内容做成“参数” SQLCommand支持带参数的查询,也就是说,可以在查询语句中指定参数: 参数的设 ...
- Oracle学习【索引及触发器】
索引B_Tree结构 请参照 响应图例 索引是一种允许直接访问数据表中某一数据行的树形结构,为了提高查询效率而引入,是独立于表的对象,可以存放在与表不同的表空间中.索引记录中存有索引关键字和指向表中数 ...
- iOS,长按图片保存实现方法,轻松搞定!
1.添加手势识别: UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@s ...