jquery 实现 input 下拉框模糊搜索及 IOS 的 keyup 兼容性问题解决

场景描述:

公司有很久以前用 jquery 开发的 h5 项目要更新,需要动态获取接口返回的数据列表,然后前端实现 input 框下拉模糊搜索功能。虽然不常用,由于测试过程中遇到了一个 安卓 / IOS 对键盘的 keyup 兼容性问题,还是简单记录一下

代码实现:

html 部分:

<input class="department" type="text" placeholder="请输入科室 / 病区" />
<ul class="departments_ul"></ul> 

js 部分:

$(function () {
	getDepartList(); // 获取科室列表
	departmentSearch(); // 科室模糊搜索开启
})

// 科室/病区 模糊搜索
function departmentSearch() {

  // 注意!!!这里开始用的是 keyup 事件监听,在安卓机没问题,但是在 IOS 浏览器中会不灵敏,存在兼容性问题,所以这里做了环境判断,安卓用 keyup ,IOS 用 input
  
  // IOS
  var bind_name = "input";
  
  // IE
  if (navigator.userAgent.indexOf("MSIE") != -1) {
    bind_name = "propertychange";
  }  
  
  // 安卓
  if (navigator.userAgent.match(/android/i) == "android"){
    bind_name = "keyup";
  } 
  
  // 模糊搜索
  $(".department").on(bind_name, function() {
    $(".departments_ul li").hide().filter(":contains("+ $(".department").val().trim() +")").show();
  })
  
  // 点击下拉项选中
  $(".departments_ul").on("click", "li", function() {
    var value = $(this).text();
    $(".department").val(value);
    $(".departments_ul li").hide();
  })
  
  // 点击其他区域隐藏科室列表
  $(".body").on("click", function() {
    $(".departments_ul li").hide();
  })
}

// 获取科室/病区列表
function getDepartList() {
  new AjaxRequest({
    type: 'GET',
    url: '你的url',
    contentType: '',
    succallBack: function (res) {
      if (res.status === '0') {
        const da = res.data
        
        // 重点!!!遍历数据动态添加 li
        $.each(da, function (index, value) {
          var name = da[index];
           var $li = "<li class='departments_item'>" + name + "</li>";
          $(".departments_ul").append($li);
        })
        $(".departments_ul li").hide();
      }
    },
    error: function (res) {
      console.log(res)
    },
  })
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值