「編集可能」のIDでcontenteditableであるdivがあります。ユーザーが入力した結果が欲しいのですが、物理的なキーイベントではなく、事前に決定されたメッセージが表示されます。
たとえば、あらかじめ決められたメッセージが「歌う」という単語の場合、ユーザーが最初に入力した文字に関係なく、最初に表示される文字は「S」です。2回目のキーを押すと、「i」が表示されます。等々。
このフォーラムで、キーイベントに関連付けられた文字の変更をシミュレートするコードを見つけました。また、例の「S」を実現するようにコードを変更しました。以下のコードを貼り付けて、ここに作成しました:http: //jsfiddle.net/Ukkmu/61/
もちろん、このコードは私に「S」を無限に与えます。私が立ち往生しているのは、この関数を1回だけ実行してから、「i」、「n」などの別の関数を呼び出すことです。
トグル関数で機能する可能性のあるリードを1つ取得しましたが、それをコードに適用する方法を識別できませんでした。
function transformTypedCharacter(charStr) {
return /[a-z]/.test(charStr) ? "S" : /[A-Z]/.test(charStr) ? "S" : charStr;
}
function insertTextAtCursor(text) {
var sel, range, textNode;
if (window.getSelection) {
sel = window.getSelection();
if (sel.getRangeAt && sel.rangeCount) {
range = sel.getRangeAt(0).cloneRange();
range.deleteContents();
textNode = document.createTextNode(text);
range.insertNode(textNode);
// Move caret to the end of the newly inserted text node
range.setStart(textNode, textNode.length);
range.setEnd(textNode, textNode.length);
sel.removeAllRanges();
sel.addRange(range);
}
} else if (document.selection && document.selection.createRange) {
range = document.selection.createRange();
range.pasteHTML(text);
}
}
$("#editable").keypress(function(evt) {
if (evt.which) {
var charStr = String.fromCharCode(evt.which);
var transformedChar = transformTypedCharacter(charStr);
if (transformedChar != charStr) {
insertTextAtCursor(transformedChar);
return false;
}
}
});