2012-11-05 62 views
-3

我需要翻译textarea中的文本。当我按下space键时,会在该字段&中的文本中进行ajax请求,然后替换为响应文本。textarea - 将光标移到光标前并替换它

但是,如果我只是在空格&之前用单个单词进行ajax请求,那么将会更好,然后用响应词替换该单词。这样我可以逐字地翻译&,这正是我需要的。

任何想法?如果您有任何问题,请分享。

+0

但是,如果您发布代码会更好 –

+0

我尝试了我在第一段中所说的内容。还没有尝试过第二段。需要想法。 – sha256

回答

2

功能如果空格键被按压(键代码32)getLast返回最后一个字中的textarea

function getLast(o) { 
    return ("" + o).replace(/[\s-]+$/, '').split(/[\s-]/).pop(); 
} 

,然后调用textarea的值的getLast功能。然后让一个AJAX调用传递最后一个字作为变量。

$('#textArea').keyup(function(e) { 
    if (e.keyCode == 32) { 
     var textArea = $('textArea'); 
     var word = getLast(textArea.val()); 
     $.ajax({ 
      type: "POST", 
      url: "index.cfm?fuseaction=user.test2", 
      data: { 
       currentWord: word 
      } 
     }).done(function(translation) { 
      var translatedWord = $.trim(translation); 
      var string = textArea.val(); 
      string = string.replace(word, translatedWord); 
      textArea.val(string); 
     }); 
    } 
});​ 

但是,我觉得你最好的选择是在整个文字结尾处翻译整个textarea。

+0

+1,看起来不错!更新单词怎么样?如果我继续打字并且不等待响应被替换,该怎么办? – sha256

1

我想你知道如何检索文本输入中的字符串。

要隔离最后一个单词,必须在字符串末尾附近寻找包含单词字符的非单词字符。我建议使用Regular Expressions

备注:这不是一个答案元素,但我认为逐字逐句翻译不是一个好主意,并且将翻译输出放在与输入相同的区域可能会非常痛苦。您应该进行全局翻译,并将输出结果显示在屏幕上的其他位置,并在输入发生变化时更新它,例如Google翻译。

+0

我明白。但是我认为这样做不会太糟糕,如果用户在输入文字后看到文字翻译的话:) – sha256

+0

@ sha404是的,对于“打字文本”的名义情况,您是对的。但是有很多少数情况。通常,当你输入一个文本时,有些东西比如输入“退格”,编辑别的东西,最后一个单词,复制​​/粘贴等......并且所有这些功能都会因为你计划实现的交互而被打破。 –

+0

是的,你是对的! – sha256