簡體   English   中英

如何檢查按鍵上文本字段的新值?

[英]How can I check the new value of a text field on keypress?

我有一個表單字段,我需要能夠檢測字段何時更改並使用字段的值執行一些其他代碼。 如果按下的鍵實際上改變了文本框的值,我只想執行代碼。 這是我提出的解決方案。

function onkeypress(e) {
  var value = this.value;
  // do something with 
}

function onkeyup(e) {
  if ( e.which == 8 || e.keyCode == 46 ) { // delete or backspace keys
    this.onkeypress(e);
  }
}

但是只有一個問題。 onkeypress在字段值更新之前被觸發,所以當我獲取值時,我得到之前的值。 如果我知道一種方法來測試密鑰是否改變了值,我會專門使用密鑰,但是某些字符(如箭頭鍵)對字段的值沒有影響。

有任何想法嗎?

這很簡單,只需使用onkeyup而不是onkeypress

我這樣做的方法只是使用prevValue的變量。 在按鍵功能結束時,將值存儲在該變量中,如果該值不等於該值,則僅再次執行該功能。

有另一個條件:

if(e.keyCode > 31  && e.keyCode < 127) {
    value = this.value + e;
}

這將捕獲鍵盤在特殊字符范圍之外輸入的任何低級ascii符號。

編輯:(32是空格)

function onkeyup(e) {        
  if ( e.which == 8 || e.keyCode == 46 ) { // delete or backspace keys 
    switch(e.keyCode) {
      case 32:
      case 48..90:
      case 96..111:
      case 188:
      case 190..192: 
      case 219..222:
          value = this.value + e;
          break;
      default: 
          break;
    }       
    this.onkeypress(e);        
  }        
}

這是我的最終解決方案,它使用prevValue變量,但不會污染全局命名空間(窗口)或dom元素的屬性。

(function() {
  var input = document.getElementById('input_box'),
      prevValue;

  input.onkeyup = function(e) {
    if ( this.value != prevValue ) {
      prevValue = this.value;
      // execute some more code here...
    }
  }
}());

請注意,onkeyup函數用作prevValue變量的閉包。 這可以防止命名空間污染,因此我不必創建全局變量或將屬性附加到input元素本身。 這是我能得到的優雅。 我實際上是用jQuery編寫的,但認為答案本身應該是純JavaScript ...

這是一種黑客行為,但您可以將之前的值放在文本框的屬性中(稱為“expando attributes”)

function onkeypress(e) {
  this.oldvalue = this.value;
}

function onkeyup(e) {
  if (this.value != this.oldvalue) {
    // do something
  }
}

您可以存儲舊值並檢測它是否已更改:

function keyUpHandle(e) {
  if (this.prevValue && this.prevValue != this.value) {
    // do something
  }
  this.prevValue = this.value;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM