2009-04-28 8 views
1

英語をヒンディー語のonkeyupイベントに変換するtextareaがあります。しかし、編集のためにキャレットを後ろに移動すると、最初に入力した文字Iがヒンディー語に変換され、キャレットは文字列の最後に移動します。 textarea内の同じ位置にキャレットを格納することができるため、文字列の最後に移動しませんか?テキストエリアを編集可能にするには?

+0

キャレットがちょうど入力した文字の右側に移動するのはなぜ問題なのですか?それは正常な行動ではありませんか?新しい文字の後にキャレットが置かれない場合は、逆方向に入力します(新しい文字はそれぞれ前の文字の左に表示されます)。 – Calvin

+0

それはそうではありません。実際には文字列の真ん中に新しい文字を挿入すると、しばらく入力した新しい文字の右側にキャレットが移動し、文字列の最後に移動します... –

答えて

0

この問題は、キャレットを移動するキーアップごとにテキストエリアの値を上書きしてしまうことです。

の値をに置き換えて置き換え、置き換えた後に再度設定することをお勧めします。

Stackoverflow Answer: Get Caret Position - コード変更されていない

function getCaret(el) { 
    if (el.selectionStart) { 
    return el.selectionStart; 
    } else if (document.selection) { 
    el.focus(); 

    var r = document.selection.createRange(); 
    if (r == null) { 
     return 0; 
    } 

    var re = el.createTextRange(), 
     rc = re.duplicate(); 
    re.moveToBookmark(r.getBookmark()); 
    rc.setEndPoint('EndToStart', re); 

    return rc.text.length; 
    } 
    return 0; 
} 

Stackoverflow Answer: Set Caret Position下記のリンクから答え - コード変更されていない

function SetCursorPosition(pos) 
{ 
    // HERE txt is the text field name 
    var obj=document.getElementById('<%= txt.ClientID %><%= txt.ClientID %>'); 

    //FOR IE 
    if(obj.setSelectionRange) 
    { 
     obj.focus(); 
     obj.setSelectionRange(pos,pos); 
    } 

    // For Firefox 
    else if (obj.createTextRange) 
    { 
     var range = obj.createTextRange(); 
     range.collapse(true); 
     range.moveEnd('character', pos); 
     range.moveStart('character', pos); 
     range.select(); 
    } 
} 

下記のリンクの答えから、すべての交換を回避することでこれを回避するには、いくつかの他の方法があります。キーアップイベントのテキストをボタン押し、ぼかし/ぼかしまたはその他のものに移動します。これにより、キャレット位置が最後までリセットされることを心配する必要がなくなります。

私は、テキスト変更を引き起こす別のイベントに移動するために私が見る唯一の真の不利な点は、それが瞬間的ではないということだけです。

関連する問題