搜索框的监听、节流、软键盘搜索、以及在安卓和ios上的区别

模板:

搜索框HTML:
这是基本的input 写法:

  <input id="search" type="text" name="search">

升级写法:
要求在手机端点击input输入框时,软键盘的回车键显示为搜索,点击该键实现搜索功能。

<form class="form" action="javascript:searchIt();" id="form">
	<input id="search" type="search" maxlength="16"/>
</form>
在此要配合css:
    将type=search 时搜索框右侧叉号去掉。
.search  input[type=search]::-webkit-search-cancel-button{
    	-webkit-appearance: none;
}
再配合上function searchIt(){} 函数即可。

节流JS

<script>
        function queryData(text){
            console.log("搜索:" + text);
        }
        var input = document.getElementById("search");
        input.addEventListener("keyup", function(event){
            throttle(queryData, null, 500, this.value);
            // queryData(this.value);
        });
        
        function throttle(fn,context,delay,text){
            clearTimeout(fn.timeoutId);
            fn.timeoutId = setTimeout(function(){
                fn.call(context,text);
            },delay);
        }
   </script>

监听input的节流实例:

// 监听 input 内容
var keyWord, page=1, isOpen=true;
function listenSearch(page){
    var cpLock = false;
    document.getElementById("search").addEventListener('compositionstart', function () {
        cpLock = true;
    });
    document.getElementById("search").addEventListener('compositionend', function () {
        cpLock = false;
        //这一段 if 中的内容在安卓上可以不写,但在ios上必须要写,否则无相应监听事件触发。
        if (!cpLock) {
            keyWord = e.target.value;
            throttle(queryData, null, 300, keyWord);
        }
    });
    document.getElementById("search").addEventListener('input', function (e) {
        if (!cpLock) {
            keyWord = e.target.value;
            throttle(queryData, null, 300, keyWord);
        }
    });
}
function throttle(fn, context, delay, text) {
    clearTimeout(fn.timeoutId);
    fn.timeoutId = setTimeout(function(){
        fn.call(context, text);
    }, delay);
}
    function queryData(keyWord) {
		if(isOpen){
			api.openFrame({
				name: 'scenicList_frm',
				url: './scenicList_frm.html',
				rect: {
					x: 0,
					y: $api.byId('header').offsetHeight,
					w: 'auto',
					h: api.winHeight - $api.byId('header').offsetHeight
				},
				pageParam: {
					keyWord: keyWord
				}
			});
		}
		isOpen=false;
		api.sendEvent({
			name: 'input',
			extra: {
				keyWord: keyWord
			}
		});
	}

更多详情以及增强版的节流操作见:https://www.cnblogs.com/LuckyWinty/p/5949970.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值