input的失焦事件和click事件冲突问题

自己个人遇到在手机端遇到问题
问题一

描述:在input输入框得焦的状态下,点击button的click事件时,页面执行了blur(虚拟键盘消失),而没有执行click事件
原因:因为blur优先级大于click,所以导致click没执行,要再点击才执行

解决方法就是使用下面笔记的方法二
这样就可以优先执行mousedown 再执行blur事件

问题二:

描述:在input输入框得焦的状态下,点击(div)绑定的(click或mousedown ),事件(请求接口的事件),不知道为什么用问题一的解决方法把click改为mousedown事件没用,(过程是输入款执行了失去焦点(虚拟键盘隐藏),只有再点击事件(请求接口的事件)才会触发)
注:问题一是button标签,问题二是div标签,自己测试发现移动端div的用mousedown没用
想要的效果:点击下单按钮让输入款失焦,虚拟键盘隐藏,事件成功执行

解决方法:直接给事件加 $(‘input’).blur() 让所有input都失焦,(也可以自己指定input)

笔记:
网上找的答案一共差不多都是说两种
转载链接:https://www.cnblogs.com/web-record/p/10075375.html
第一种:使用setTimeOut倒计时定时器

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

第二种:给按钮加mousedown 方法
理由是:事件执行的优先级顺序问题:mousedown > blur > click

// html
<input type="text" autofocus="autofocus">
<button>点击我文本输入框不会失去焦点</button>

// javascript
var btn = document.querySelector('button')
btn.onmousedown = function(event) {
    
    event.preventDefault()}

猜你喜欢

转载自blog.csdn.net/Object_prototype/article/details/112967664