挺炫的一個效果,百度和谷歌好像已經實現好多年了,我以為在網上能輕易找到代碼來實現這個效果。真正遇到這個需求,發現還真找不到。於是自己動手寫這個效果,由於我是把效果整合到我的整套框架裡,所以沒有進行單獨的封裝。
需求:
實現帶有提示的input框,類似百度搜索,有改動的時候去獲取常用關鍵字,數據來源於系統數據庫,支持鼠標選擇或鍵盤選擇
思路:
框架一貫思路,透過class作為監聽入口,透過data作為資料傳遞;
透過監聽input和propertychange事件實現即時的改動監聽,input是主流,propertychange是ie,你懂的;
透過ajax實現post動作,把返回內容顯示成類似選框的形式;
監聽鍵盤的上鍵(38)、下鍵(40)、回車鍵(13),透過綁定keydown ,判斷event.keycode實現;
監聽滑鼠的mouseover和click事件,與鍵盤動作要完美結合;
若input內容要求與已知選項必須一致,則監聽blur事件,判斷是否允許換焦點;
實作程式碼:
//By COoL
//定義全域變數用於儲存提示層
var liketips;
//監聽改動或得到焦點事件
//停用chrome和firefox瀏覽器自帶的自動提示
$('.getsearchjson').attr("autocomplete","off");
$('.getsearchjson').bind( "propertychange input focus",function(event){
$this=$(this);
if(event.type!='focus'){
必須重新選擇,因為純人手輸入會導致value無法插入
$this.data('ok',false);
}
的位置
var top=1*$this.offset().top 25;
var left=1*$this.offset().left;
var width=1*1 width=1*$. ) 12;
//重建儲存提示層並讓其在適當位置顯示
$(liketips).remove();
liketips=document.createElement('div); > $liketips=$(liketips);
//class樣式這裡不提供,最主要是position:absolute
$liketips.addClass("liketips");
top 'px',left:left 'px',width:width 'px'});
//載入前先顯示loading動態圖
$liketips.append('

$liketips.appendTo($this.parent());
$liketips.show();
$liketips.show();
🎜> /定義ajax去取得json,type參數透過data-type設置,keyword則是目前已輸入的值
//返回值以table形式展示
$.post('/data/search.do', {type:$this.data('type'),keyword:$this.val()},function(json){
$liketips.empty();
0' cellpadding='2'>";
for(var i=0;i
htmlcode ='
}
htmlcode ="
//將loading動態圖換成內容
$liketips.html(htmlcode);
$liketips.html(htmlcode);
$liketips.html(htmlcode);
//焦點消失時確保資料來自選項,隱藏提示框體
$('.getsearchjson').blur(function(){
//因為滑鼠點擊時blur動作結算在click之前,setTimeout是為了解決這個問題
$oldthis=$(this);
setTimeout(function(){
$(liketips).fadeOut('fast');
else{
this. focus();
}
},200);
});
//監聽鍵盤動作
$('.getsearchjson').keydown(function(event){
//console.log(event.keyCode);
//console.log(event.keyCode);
//console.log(event.keyCode);
//console.log(event.keyCode); //console.log(event.keyCode);
//console.log(event.keyCode);
$this $this $this. =$(this);
if(event.keyCode==40){
//按鍵是向下
有選中,則向下,否則,選取選單中第一個
if($nowtr.length>0){
不是最後選項,向下個tr移動,否則跳到第一個tr
if($nexttr.length>0){
$nexttr .addClass('selectedtr');
}
moveClass();
$nowtr.parent().find('tr:first' ).addClass('selectedtr');
}
}
ps').find('tr:first').addClass('selectedtr');
}
}
else if(event.keyCode==38){
//如果已存在選中,則向下,否則,選中選單中第一個
if($nowtr.length>0){
$prevtr=$nowtr.prev('tr')
//如果不是最後選項,向下個tr移動,否則跳到第一個tr
if($prevtr.length>0){
$ prevtr.addClass('selectedtr');
}
.removeClass();
$nowtr.parent().find('tr:last ').addClass('selectedtr');
}
}
ps').find('tr:last').addClass('selectedtr');
}
}
else if(event.keyCode==13){
tr. selectedtr');
if($nowtr.length==1){
//設定value值至input框透過資料-value $valuefield=$('input[name=' $this.data('valueto') ']');
$valuefield.val($nowtr.data('value H)); //設定狀態下為選項選擇,並允許blur
$(liketips ).fadeOut('fast');
return false;
}
//console.log(event.keyCode);
return true;
});
//監聽滑鼠動作,mouseover改變選取項目
//監聽滑鼠動作,mouseover改變選取項目
$(document). delegate('.liketips td','mouseover',function(){
$nowtr=$(this).parent();
$nowtr.siblings('tr').removeClass(); $nowtr.addClass('selectedtr');
});
//監聽滑鼠動作,click選擇
$(document).delegate('.liketips td','click ',function(){
$nowtr=$(this).parent();
if($nowtr.length==1){
> $inputfield=$nowtr.parent().parent().parent().siblings('input.getsearchjson');
在儲存項目中去,一般是hidden項目
$valuefield=$('input[name=' $inputfield.data('valueto') ']');
('value'));
$inputfield.val($nowtr.text());
//設定狀態是從選項中選擇,允許blur //設定狀態是從選項中選擇,允許blur true);
}
$(liketips).fadeOut('fast');
});
複製程式碼

准备工作用vuecreateexample创建项目,参数大概如下:用原生input原生的input,主要是value和change,数据在change的时候需要同步。App.tsx如下:import{ref}from'vue';exportdefault{setup(){//username就是数据constusername=ref('张三');//输入框变化的时候,同步数据constonInput=;return()=>({

laravel input隐藏域的实现方法:1、找到并打开Blade模板文件;2、在Blade模板中使用method_field方法来创建隐藏域,其创建语法是“{{ method_field('DELETE') }}”。

PHP开发:实现搜索关键词提示和自动补全功能在现今互联网时代,搜索引擎已经成为人们获取信息的重要渠道之一。而在网站开发中,搜索功能的重要性不言而喻。为了提升用户体验和搜索效果,实现搜索关键词提示和自动补全功能是一项非常有价值和必要的开发任务。本文将为大家介绍如何在PHP开发中实现搜索关键词提示和自动补全功能,并提供具体的代码示例。搜索关键词提示是指在用户输入

当在输入框中添加值时,就会发生oninput事件。您可以尝试运行以下代码来了解如何在JavaScript中实现oninput事件-示例<!DOCTYPEhtml><html> <body> <p>Writebelow:</p> <inputtype="text"

Vue.js是一种轻量级的JavaScript框架,具有易用、高效和灵活的特点,是目前广受欢迎的前端框架之一。在Vue.js中,input框绑定事件是一个十分常见的需求,本文将详细介绍Vue文档中的input框绑定事件。一、基础概念在Vue.js中,input框绑定事件指的是将输入框的值绑定到Vue实例的数据对象中,从而实现输入和响应的双向绑定。在Vue.j

点击input框没有光标的解决办法:1、确认输入框焦点;2、清除浏览器缓存;3、更新浏览器;4、使用JavaScript;5、检查硬件设备;6、检查输入框属性;7、调试JavaScript代码;8、检查页面其他元素;9、考虑浏览器兼容性。

Vue是一个流行的JavaScript前端框架,它的核心是响应式数据绑定和组件系统。在Vue的应用程序中,input框是最常用的UI元素之一。在用户输入文本时,我们希望可以监听回车事件,并且在提交前对输入内容进行验证。本篇文章将介绍Vue文档中的input框回车事件和验证函数使用方法。一、Vue中input框回车事件在Vue中监听input框的回车事件非常简

jquery中input是选择器选取表单元素,其作用是:1、input用于搜集用户信息,根据不同的type属性值,输入字段拥有很多种形式,输入字段可以是文本字段、复选框、掩码后的文本控件、单选按钮、按钮等等;2、input标签可定义输入域的开始,在其中用户可输入数据;3、使用input标签来进行定义,其中包括文本字段、多选列表、可单击的图像和提交按钮等。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

Dreamweaver Mac版
視覺化網頁開發工具

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

Atom編輯器mac版下載
最受歡迎的的開源編輯器

SublimeText3 Linux新版
SublimeText3 Linux最新版