`

input中blur失去焦点事件与点击事件冲突的解决方法

阅读更多

遇到一个问题,就是输入框input的blur事件与点击click事件的冲突了,在click的时候会先触发blur事件,没有触发click

 

// 备注名
$(function(){
  $(".cy-name-input input").on({
    focus:function() {
      $(".cy-close").css('display','block');
    },
    blur:function() {
      setTimeout(function(){
        $(".cy-close").css('display','none');
      },250)
    }
  })
  $(".cy-close").click(function(){
    $(".cy-name-input input").val('');
  })
})

 

 

还有一种情况,下拉框blur和click事件冲突,导致不能正常选择值

原因:由于JavaScript为单线程,同一时间只能执行处理一个事件。“blur优先于click执行”。而在本示例中,由于blur处理程序,会将对下拉框展示区隐藏,所以导致其后续click事件并不会执行。

解决方案1:对blur事件进行延迟,让click先执行。

$("input").focus(function(){
        // input框获取焦点,展示下拉框
        $(".search-list").attr("data-status", "show");
    }).blur(function(){
        setTimeout(function(){
            // input框失去焦点,隐藏下拉框
            $(".search-list").attr("data-status", "hide");
        }, 300);
    });
    // 选择对应选项,并赋值给input框
    $(".search-list li a").click(function(){
        console.log("执行");
        $("input").val($(this).text());
    });

 解决方案2:将click事件改为mousedown,让其优先于blur事件执行

 $("input").focus(function(){
        // input框获取焦点,展示下拉框
        $(".search-list").attr("data-status", "show");
    }).blur(function(){
        // input框失去焦点,隐藏下拉框
        $(".search-list").attr("data-status", "hide");
    });
    // 选择对应选项,并赋值给input框
    $(".search-list li a").mousedown(function(){
        $("input").val($(this).text());
    });

 mousedown事件:当鼠标指针移动到元素上方,并按下鼠标按键时,会发生mousedown事件。

mouseup事件:当在元素上放松鼠标按钮时,会发生mouseup事件。 

注意: 

(1)mousedown与click 事件不同,mousedown事件仅需要按键被按下,而不需要松开即可发生。 

(2)mouseup与click事件不同,mouseup事件仅需要放松按钮。当鼠标指针位于元素上方时,放松鼠标按钮就会触发该事件。

 

 

其执行顺序为:mousedown >> mouseup >> click

 

参考网址:http://blog.csdn.net/ligang2585116/article/details/51764828

 

 

分享到:
评论

相关推荐

    快速解决js开发下拉框中blur与click冲突

    blur事件:当元素失去焦点时触发blur事件;其为表单事件,blur和focus事件不会冒泡,其他表单事件都可以。 click事件:当点击元素时触发click事件;所有元素都有此事件,会产生冒泡。 示例1:blur事件为表单事件 &...

    jQuery解决input元素的blur事件和其他非表单元素的click事件冲突问题

    本文主要介绍在使用jQuery处理`input`元素的`blur`事件与其他非表单元素的`click`事件时出现的冲突,以及如何解决这些问题。 ### 知识点一:blur事件和click事件的基本概念 - **blur事件**:在Web开发中,`blur`...

    解决Js先触发失去焦点事件再执行点击事件的问题

    keyup事件用于监听键盘按键的释放,blur事件在元素失去焦点时触发,click事件则在元素被点击时触发。在用户交互过程中,如果keyup事件快速连续触发,可能导致在元素还未失去焦点的情况下即触发click事件,从而影响...

    Javascript blur与click冲突解决办法

    `blur`事件在元素失去焦点时触发,而`click`事件则在用户点击元素时被激活。这两种事件在某些场景下可能会产生冲突,特别是在处理用户交互和界面反馈时。例如,当用户在输入框(`<input>`)中输入并尝试选择下拉列表...

    获取焦点ng-focus实例

    在IT行业中,`ng-focus`是一个AngularJS框架中的指令,用于处理元素获得焦点时的事件。这个指令在创建交互式用户界面时非常有用,尤其是在构建动态网页应用时。本篇文章将深入探讨`ng-focus`的使用、工作原理以及...

    使用Jquery实现点击文字后变成文本框且可修改

    当用户完成编辑并失去焦点(blur)时,我们将文本框的内容更新回原始的`<p>`元素。以下是相关的jQuery代码实现: ```javascript $(document).ready(function() { $('#editableText').click(function() { var ...

    ie focus bug 解决方法

    当我们将`input.focus()`放入`setTimeout`中,并设置延迟时间为0时,实质上是将该操作放入了浏览器的事件队列,等待当前执行上下文完成后再执行,这样可以确保元素已经被正确地添加到DOM中,从而可以成功获取焦点。...

    jQuery详细教程

    下面是 jQuery 中事件方法的一些例子: Event 函数 绑定函数至 $(document).ready(function) 将函数绑定到文档的就绪事件(当文档完成加载时) $(selector).click(function) 触发或将函数绑定到被选元素的点击事件 $...

    Jquery使用小技巧汇总

    20. **解决Jquery类库与其他Javascript类库冲突问题**:通过命名空间或使用`noConflict()`方法。 ```javascript var jq = $.noConflict(); jq(document).ready(function() { // 使用jq代替$ }); ``` 以上这些技巧...

    js限制input只能输入有效的数字(第一个不能是小数点)

    此外,还需要监听`blur`事件,当输入框失去焦点时,进行最后的格式校验,若最后一个字符为小数点,则将其移除。 第二种方法则是使用正则表达式来验证用户输入的值。在`onkeyup`事件触发时调用`clearNoNum`函数,该...

    网站设计与维护网站设计与维护期末考试题及答案

    11. **JavaScript事件**:`Blur`事件发生在元素失去焦点时,如用户点击了页面上的其他地方。 12. **JavaScript事件**:`Mouseover`事件会在鼠标指针移动到元素上时触发。 13. **DHTML动态内容**:DHTML允许页面...

    ajax+asp自动检测用户名是否已经存在的实例

    在这个实例中,当用户在用户名输入框失去焦点时(例如点击了别的地方),JavaScript会触发一个事件,发送一个异步请求到服务器。 以下是一般的实现步骤: 1. **前端JavaScript**:在HTML中,我们需要一个输入框(`...

    ExtAspNet v2.2.1 (2009-4-1) 值得一看

    +PageManager的实例方法AddAjaxUpdateControl改名为AddAjaxAspnetControls,现在可以在Page_Load中设置需要在AJAX中需要更新的Asp.net控件了。 -在Page_Load中设置了哪些需要在AJAX中更新的Asp.net控件会在回发时...

    ExtAspNet_v2.3.2_dll

    -修正了启用AutoPostBack的Grid,其RowClick会覆盖LinkButtonField, HyperLinkField, CheckBoxField的点击事件(feedback:yymaoji)。 +2009-11-26 v2.1.6 +修正动态创建Grid列的BUG(feedback:gxpan)。 -...

    jQuery表单美化实例代码

    例如,当输入框获得焦点时,边框变为蓝色: ```javascript $("#inputId").on("focus", function() { $(this).addClass("focused"); }); ``` 3. 为了提供实时反馈,可以使用`.val()`方法获取或设置输入值,配合AJAX...

    jquery ajax 检测用户注册时用户名是否存在

    当用户在输入框(`#NAME`)失去焦点(`blur`事件)时,`grade.js`中的`checkConfirm`函数会被调用。该函数的主要目的是在用户完成输入后检查用户名的可用性。 在`checkConfirm`函数中,我们获取用户输入的用户名(`...

    jquery1.5 参考文档

    - `$.blur`:当元素失去焦点时触发。 - `.mousedown`:当鼠标按钮被按下时触发。 - `.change`:当表单控件的值发生改变时触发。 - `.mouseenter`:当鼠标进入元素时触发。 - `.click`:当鼠标点击元素时触发。 - `....

Global site tag (gtag.js) - Google Analytics