2012-10-30 111 views
0

我有一个句子被定义为一个列表(一个字符串?一个数组?) - 我不确定是否正确的术语),我希望按任何按键顺序返回。我正在尝试使用.split。这里是清单和功能:我可以返回一个字符串到输入类型:文本字段onkeypress?

var list1 = "This is a test".replace(/\s/g, "\xA0").split("") 
function transformTypedChar(charStr) { 
    var position = $("#verse1").text().length; 
    if (position >= list1.length) return ''; 
    else return list1[position]; 
} 

目前,“T”从列表的开头重复返回,而列表的其余部分被忽略。我打电话的功能如下:

document.getElementById("verse1").onkeypress = function(evt) { 
    var val = this.value; 
    evt = evt || window.event; 

    // Ensure we only handle printable keys, excluding enter and space 
    var charCode = typeof evt.which == "number" ? evt.which : evt.keyCode; 
    if (charCode && charCode > 32) { 
     var keyChar = String.fromCharCode(charCode); 

      // Transform typed character 
     var mappedChar = transformTypedChar(keyChar); 

     var start, end; 
     if (typeof this.selectionStart == "number" && typeof this.selectionEnd == 
    "number") { 
      // Non-IE browsers and IE 9 
      start = this.selectionStart; 
      end = this.selectionEnd; 
      this.value = val.slice(0, start) + mappedChar + val.slice(end); 

      // Move the caret 
      this.selectionStart = this.selectionEnd = start + 1; 
     } else if (document.selection && document.selection.createRange) { 
      // For IE up to version 8 
      var selectionRange = document.selection.createRange(); 
      var textInputRange = this.createTextRange(); 
      var precedingRange = this.createTextRange(); 
      var bookmark = selectionRange.getBookmark(); 
      textInputRange.moveToBookmark(bookmark); 
      precedingRange.setEndPoint("EndToStart", textInputRange); 
      start = precedingRange.text.length; 
      end = start + selectionRange.text.length; 

      this.value = val.slice(0, start) + mappedChar + val.slice(end); 
      start++; 

      // Move the caret 
      textInputRange = this.createTextRange(); 
      textInputRange.collapse(true); 
      textInputRange.move("character", start - (this.value.slice(0, 
start).split("\r\n").length - 1)); 
      textInputRange.select(); 
     } 

     return false; 
    } 
}; 

如何按顺序返回整个列表?换句话说,在第一次按键事件中出现“T”,在第二次按键事件中出现“h”等等。我可以在contenteditable divs中实现这一点,但我使用输入类型:文本字段,因为我想在两者之间进行自动标记。

整个代码是在这里:http://jsfiddle.net/NAC77/9/

回答

相关问题