input type="search" 实现搜索框

阅读更多

欲实现一个文字搜索的功能,要求输入时,键盘回车按钮提示显示为“搜索”。

参考自:https://segmentfault.com/a/1190000007765742

开始~

input type=text并不能达到这种效果,google了一下,html5 增加的type=search可以做到(但需要input type=search外面包上一层带action属性的form)。

 

取消
 

 

但type=search会有许多默认样式和行为,这次开发遇到的有:

  • 会默认下拉框显示搜索历史记录;

  • 输入时自动弹出“x”,“x”的样式在不同手机上,样式不同;

  • IOS 手机(测试时为iphone6 ios10)上输入框为椭圆形.

但我们希望样式按照我们自定义的样式显示,并且各个手机上能统一。

于是几经google,得到答案:

  • 设置input autocomplete="off"去掉弹出的下拉框;

  • 将默认的“x”隐藏掉:

  • input[type="search"]::-webkit-search-cancel-button{
        display: none;
    }
     
  • 针对ios 设置样式, 去除ios下input 椭圆形:

  • -webkit-appearance: none;
     

同时别忘记,如果提交搜索时想使用ajax,那么可以阻止表单的默认行为:

 
container.on('submit', '.input-kw-form', function(event){
    event.preventDefault();
})
 
【拓展:】
H5 input type="search" 不显示搜索 解决方法
在IOS(ipad iPhone等)系统的浏览器里打开H5页面。如下写法:
 以上设备的键盘仍然显示“换行”。
解决方法如下:在input外面嵌套一层form:
 其中form 必须有action。
如果你不想要action,因为它可能影响了你input的提交逻辑,可以重写一下onsubmit onclick等方法来实现。
也可以用简单的方法:action="javascript:return true;"。
【注意事项】
      如果
表单中只有一个,则使文本框获取焦点,并单击回车,form会自动提交。提交路径为action属性拼接到当前路径(action属性默认为空字符串,如果form没有action属性,则提交路径与当前路径相同)。
      浏览器表现:Chrome(桌布版、移动版)会出现此问题,Android手机会出现。Safari(桌面版、移动版)不会出现。
      解决方法:禁止表单提交
    1 设置成
    2 增加一个无name属性的隐藏文本框 

          3 监听input的keydown事件 
     
input.addEventListener('keydown', function(e){
    var keywd = e.target.value;
    if(event.keyCode == 13 && keywd) { 
        e.preventDefault();
    } 
});
 
 
 
.

你可能感兴趣的:(HTML)