0

在第一種方法中,使用KeyBoardEvent例如,事件處理程序f下面COULD檢索鍵盤按鍵後字符,如下所示:爲什麼值輸入對象的屬性不具有價值?

<form action="#" id="sampForm" > 
      <input id='charInput' type='text'> 
      <p id="KeyData">Key press data here</p> 
</form><br> 

document.getElementById('charInput').onkeypress = f; 

function f(event) { 
    var char = getChar(event || window.event) 
    if (!char) return false; // Special Key Pressed 
      document.getElementById('keyData').innerHTML = char + " was pressed"; 
          return true; 
}  

function getChar(event) { 
    // event.which returns the key pressed 
    if (event.which == null) { 
     // Return the char if not a special character 
     return String.fromCharCode(event.keyCode); // IE 
    } else if (event.which!=0 && event.charCode!=0) { 
     return String.fromCharCode(event.which); // Other Browsers 
    } else { 
     return null; // Special Key Pressed 
    } 
} 

在第二種方法中,使用HTMLInputElement實例的value屬性,低於回撥功能f可不可檢索按鍵後的字符,

<form action="#" id="sampForm" > 
      <input id='charInput' type='text'> 
      <p id="KeyData">Key press data here</p> 
</form><br> 

document.getElementById('charInput').onkeypress = f; 

function f(){ 
    document.getElementById('KeyData').innerHTML = document.getElementById('charInput').value + 'is pressed'; 
    return true; 
} 

在第二個方法,爲什麼document.getElementById('charInput').value是空字符串,當我按下第一鍵盤字符?事件處理方法如何解決這個問題?

注意:w3.org/TR/DOM-Level-2-Events/events.html - 實現Event接口的對象通常作爲第一個參數傳遞給事件處理函數。在上面的代碼中,我已經在第二種方法中分配了回叫而不是事件處理程序。因爲沒有說明onkeypress屬性值必須是事件處理程序的文檔。

回答

1

當用戶按下鍵盤上的某個鍵時,會發生onkeypress事件。在那個時間點,用戶輸入的關鍵值是而不是尚未放入文本框。所以當你第一次輸入密鑰時,document.getElementId('charInput').value返回當前的值爲空的文本框。下次按一個鍵時,它會顯示在文本框中輸入的第一個值。請注意,document.getElementId('charInput').value顯示文本框的當前值,而不是按下的關鍵字符。此外,應該有功能f()後bracked一個開口,所以它應該是:

function f() { 
    document.getElementById('KeyData').innerHTML = document.getElementById('charInput').value + 'is the content of charInput'; 
    return true; 
} 
+0

OK,什麼是複雜的是,當你第二次按鍵時,它會顯示第二個方法中的第一個值?這與第一種方法如何工作? – overexchange

+0

'document.getElementById('charInput').value'不顯示被按下的值,它顯示文本框的當前值。因此,當文本框中有一個字符並再次按下某個鍵時,它會顯示一個字符。 – dutchdukes

+0

是的,我明白,當文本框中有一個字符,然後再次按下一個鍵時,就會顯示出一個字符。是什麼讓'document.getElementById('charInput')。值「在按下第二個字符後立即顯示第一個字符?這是我的問題 – overexchange

0

你缺少的function f

function f(){ 
// your code 
} 
+0

''{是類型,而發佈查詢,這裏的問題是[代碼](http://jsfiddle.net/7cr2nyqo/8 /) – overexchange

0

左括號中的代碼是好的。函數f()缺少圓括號'{'。另外請確保您有這個代碼包圍<script>標籤。也可以使用onkeyup而不是onkeypress。

+0

http://jsfiddle.net/7cr2nyqo/8/ – overexchange

+0

使用onkeyup而不是onkeypress。這個事件發生在'取消'按鍵之後,它確保了該值被添加到了輸入字段中。在第一種情況下,您從事件對象本身獲得了密鑰。但是,在輸入字段中輸入值之前發生的所有事件都會發生,所以這就是值爲空的原因。要查看其中的差異,請查看此鏈接[link](http://www.bloggingdeveloper.com/post/KeyPress-KeyDown-KeyUp-The-Difference-Between-Javascript-Key-Events.aspx) –

相關問題