2010-11-11 68 views
0

所以我有一個功能,當用戶在輸入字段中輸入5個字符時觸發。輸入5個字符時執行的按鍵事件

但是,每當我在5完成後放置其他角色時,它都會繼續發射事件。

如何防止發生這種情況?

$(function(){ 
    var $zipEntry = $('#zipEntry').bind('keyup',function(event) { //bind to key up, doesn't require 
    //make sure that there are 5 numbers... or length = 5 since numeric only input 
    var $this = $(this); // cache $(this) 

     if ($this.val().length == 5){ // use cached 
      console.log("There are 5 characters!!"); 
      $this.trigger('zipEntered'); 
     } 
    }); 
+0

每次你在一個keyup上調用匿名函數時,你正在重置var $ this = $(this) – Prescott 2010-11-11 22:31:37

+0

我沒有看到任何問題。你可以在jsbin.com上做一個演示嗎? – lincolnk 2010-11-11 22:37:10

+0

只有當它等於5時不小於5或greathan 5 – kobe 2010-11-11 22:38:40

回答

1

嘗試在完成偵聽後解除綁定事件。

if ($this.val().length == 5){ 
    console.log("There are 5 characters!!"); 
    $this.trigger('zipEntered'); 
    $('#zipEntry').unbind('keyup'); 
} 
+0

工作。謝謝! – ectype 2010-11-11 22:50:59

+0

@ectype沒問題。 – stevelove 2010-11-11 22:57:49

+1

如果keyup()被解除綁定,用戶想要更正第5個字符會發生什麼? – Danosaure 2010-11-11 22:59:53

1

如果我理解正確的話,你需要使用「大於或等於」,而不是「等於」

if ($this.val().length >= 5){ 

另外,爲什麼你在變量名使用$?

+0

如果您來自PHP這樣的$ variable名稱語言,您可能會發現代碼在沒有它們的情況下很難閱讀。有時我必須抵制這種衝動。 – 2010-11-11 22:37:57

+5

在使用jQuery來指示變量持有對jQuery對象的引用時,通常會在變量名中使用美元符號。 – stevelove 2010-11-11 22:46:10

1

不能在源頭糾正問題嗎?將最大長度放在輸入字段上?

+0

+1對於簡單明顯的答案。 :) – stevelove 2010-11-12 00:40:06

+0

不可以。完成5個字符後會觸發事件。最大長度已經在輸入標記中,並且不適用於此處。您仍然可以輸入字符,但不會顯示。 – ectype 2010-11-12 20:18:22

+0

@ectype:我明白了。如果用戶按下「移動」,它將觸發該事件。從用戶的經驗角度來看,在你的情況下,不允許他糾正他的答案是可以接受的嗎?對於這類問題,我通常會得到一箇中間變量,並在觸發「觸發器」之前將其與實際值進行比較。 – Danosaure 2010-11-13 12:33:55

相關問題