1. 程式人生 > >三種方式實現input的keyup延時事件

三種方式實現input的keyup延時事件

從事IT兩年了,第一次寫技術文章,之所以一直不敢寫,因為越做這行越感覺自己菜(此處容我做一個悲傷的表情...)

今天做一個keyup的延時事件,對看清楚了,是keyup,不是男性延時!

網上搜了的方法實現有些困難,後來找大神同事幫忙想了幾個辦法出,得以解決。

一、網上找到的方法,當然程式碼是經過簡化的(W3School線上測試程式碼)原文在此:http://blog.csdn.net/qq_30152271/article/details/52536064

<!DOCTYPE html>
<html>
<head>
     <script src="/jquery/jquery-1.11.1.min.js">
     </script>
     <script>
        //全域性變數
	var last;
	//鍵盤彈起事件說明:若使用者1s內沒有其他輸入,則彈出輸入數字
	function keyup(event){
 	     last = event.timeStamp;
	     //得到輸入的值
 	     var s = $("#test").val();
  	     setTimeout(function(){
                 //如果停止輸入1s內沒其他keyup事件發生,則彈窗提示
    		 if(last==event.timeStamp){
alert(s);
    	         }
            },1000);
       }
     </script>
     </head>
     <body>
     <input id="test" onKeyUp="keyup(event)">
     </body>
</html>


總結:上面這個功能經測驗,原網頁是可以實現的,但是,我用的是easyUI,這個框架對控制元件的封裝挺多,

使用上面程式碼時兩個時間戳始終相同,於是不管我鍵盤按得多塊,按幾次,彈幾次....

二、用keyup事件呼叫定時器setTimeout();

控制元件程式碼:

<input class="easyui-numberbox" style="width: 80px; margin-bottom: 0px" data-options="required:true,value:0,precision:0,events:{keyup:showDosage}">
js程式碼:
		//初始化條件
		var number = 0;
		//鎖
		var run = false;
		//設定全域性變數儲存輸入陣列
		var kabiaoThesReadNumber ;
		function showDosage(event){
			//第二次讀數
 			kabiaoThesReadNumber = $(this).val();//$("#kabiao_thesReadNumber").numberbox('getValue');
			if(!run){
				time();
			}
			number = 0;
		}
		 function time(){
			 run = true;
			 //定時器
			 setTimeout(function(){
				 if(number==1000){
					 alert("填入讀數:"+kabiaoThesReadNumber );
					 run = false;
					 return;
				 }
				 number=number+1000;
				 time();
			 }, 1000)
		 }

總結:這個方法對ezsyUI框架是可以實現的,但過程稍顯複雜,容易出錯,不太推薦使用

三、簡單明朗的方法,利用clearTimeout(x)清除定時器

這個是在百度上搜到的答案,具體過程如下

控制元件程式碼:

<input class="easyui-numberbox" style="width: 80px; margin-bottom: 0px" data-options="required:true,value:0,precision:0,events:{keyup:showDosage}">
js程式碼:
  //全域性變數,儲存定時器
	 var t;
	 function showDosage(event){
		//輸入數字
		var theReadNumber = $(this).val();
		//取消定時器選擇回車和刪除事件(此方法按回車和刪除鍵也會觸發,所以此處需要判斷,當然不同情況有不同判斷,這裡就不一一舉例了)
		if(event.keyCode != 13 && event.keyCode != 8){
			//清除定時器
			clearTimeout(t);
			t = setTimeout(function(){
				alert("當前使用者理論用氣量為:"+(theReadNumber-lastReadNumber )+"方");
			},1000);
		}	
	}


總結:第三種發發簡單明朗,值得推薦 注:可能是我寫法上有問題,此處esayUI不能用$("#").val()的方式得到完整的值,所以用$(this).val();

相關推薦

方式實現input的keyup事件

從事IT兩年了,第一次寫技術文章,之所以一直不敢寫,因為越做這行越感覺自己菜(此處容我做一個悲傷的表情...) 今天做一個keyup的延時事件,對看清楚了,是keyup,不是男性延時! 網上搜了的方法實現有些困難,後來找大神同事幫忙想了幾個辦法出,得以解決。 一、網上找到的

方式實現觀察者模式 及 Spring中的事件編程模型

其中 我想 訂閱 個人 args 我們 發送通知 當前 字段 觀察者模式可以說是眾多設計模式中,最容易理解的設計模式之一了,觀察者模式在Spring中也隨處可見,面試的時候,面試官可能會問,嘿,你既然讀過Spring源碼,那你說說Spring中運用的設計模式吧,你可以自信的

詳解Linux搭建vsftp服務器通過方式實現文件傳輸

x86 sys fig passwd 問題: mage vpd cee 啟用 概述 FTP(File Transfer Protocol)中文稱為“文件傳輸協議”。用於Internet上的控制文件的雙向傳輸。 工作原理 一、主動模式: 1、客戶端通過用戶名和密碼登錄服務器

WPFの方式實現快捷鍵

原文: WPFの三種方式實現快捷鍵 最近,對wpf新增快捷鍵的方式進行了整理。主要用到的三種方式如下: 一、wpf命令: 資源中新增命令 <Window.Resources> <RoutedUICommand x:Key="ToolCapClick" Text

實現執行緒的第方式 實現Callable介面

package com.juc; import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import java.util.concurrent.FutureTask; /**

方式實現java單例

java的單例模式主要分為:餓漢模式和懶漢模式 餓漢模式:餓漢很飢餓,所以直接先new出來,再提供。 餓漢模式程式碼:載入class檔案的時候就例項化。 package com.jkf.redis; public class HungryManSingleto

方式實現遠端restful 介面呼叫

1,基本介紹 Restful介面的呼叫,前端一般使用ajax呼叫,後端可以使用的方法比較多,   本次介紹三種:     1.HttpURLConnection實現     2.HttpClient實現     3.Spring的RestTemplate      

以下是JAVA中方式實現檔案字元統計

以下是JAVA中三種方式實現檔案字元統計 package com.lyc.gui; import java.io.FileReader; import java.io.IOException; import java.util.HashMap; import java.util.Ha

方式實現二維碼(java)

一. 通過使用zxing方式實現:  jar準備: https://github.com/zxing/zxing 下載原始碼,將core/src/main/Java/下的所有檔案和javase/src/main/java/下的所有檔案一起打成jar檔案zxing.jar

Android 方式實現圓形ImageView

所有方式均繼承了ImageView 圓形圖片實現一:BitmapShader package com.open.widget; import android.content.Context; import android.graphics.Bitmap; impor

vue方式實現:全選、反選、全不選

方法一:v-model 與 [{checked:true},…] <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="vi

python使用遞迴、尾遞迴、迴圈方式實現斐波那契數列

    在最開始的時候所有的斐波那契程式碼都是使用遞迴的方式來寫的,遞迴有很多的缺點,執行效率低下,浪費資源,還有可能會造成棧溢位,而遞迴的程式的優點也是很明顯的,就是結構層次很清晰,易於理解     可以使用迴圈的方式來取代遞迴,當然也可以使用尾遞迴的方式來實現。    

【框架】[Spring]AOP攔截-方式實現自動代理

這裡的自動代理,我講的是自動代理bean物件,其實就是在xml中讓我們不用配置代理工廠,也就是不用配置class為org.springframework.aop.framework.ProxyFactoryBean的bean。 總結了一下自己目前所學的知識

【Android進度條】方式實現自定義圓形進度條ProgressBar

總結了3種方法: 1.多張圖片切換 2.自定義顏色 3.旋轉自定義圖片 其它: Android自定義控制元件NumberCircleProgressBar(圓形進度條)的實現:點選開啟連結 橫線帶數字進度條:點選開啟連結

方式實現欄佈局(聖盃佈局,雙飛翼佈局前端面試的佈局問題)

1.float+margin效果如下:html程式碼如下: <div class="main">im center</div> <div class="left">

方式實現Android頁面底部導航欄

我們在Android手機上使用新浪微博和QQ等一些軟體時,經常會遇到類似下面這種頁面底部導航欄的控制元件,使用這種導航欄可以在手機螢幕的一頁中顯示儘可能多的內容,如下圖所示: 下面我將實現這種導航欄的三種方法總結如下: 一、使用TabHost實現(TabHost在新版的A

方式實現分散式鎖

方案一:資料庫樂觀鎖 樂觀鎖通常實現基於資料版本(version)的記錄機制實現的,比如有一張紅包表(t_bonus),有一個欄位(left_count)記錄禮物的剩餘個數,使用者每領取一個獎品,對應的left_count減1,在併發的情況下如何要保證left_count不為負數,樂觀鎖的實現方式為在紅包表

android方式實現自由移動的view

public class MoveView extends ImageView { private int x, y; private int r, l, t, b; public MoveView(Context context) { this(context, n

Thinking in Java---執行緒通訊+方式實現生產者消費者問題

前面講過執行緒之間的同步問題;同步問題主要是為了保證對共享資源的併發訪問不會出錯,主要的思想是一次只讓一個執行緒去訪問共享資源,我們是通過加鎖的方法實現。但是有時候我們還需要安排幾個執行緒的執行次序,而在系統內部執行緒的排程是透明的,沒有辦法準確的控制執行緒的切

Android方法實現按鈕點選事件

0.我們都知道Java在開發介面的時候,需要使用監聽事件,只有在寫過監聽事件之後才能夠完整的使用軟體,比如說,我們在寫了一個button之後,想點選button,然後在文字標籤中變換字型該怎麼做呢?那麼我們就需要對button這個view進行新增監聽事件,新增完監聽事件之後,