2011-08-01 4 views
4

http://jsfiddle.net/tYXTX/なぜIE 8はこのJSのテキストエリアの最後にカーソルをジャンプさせますか? Firefoxので

、(インライン下記付属)上記のスクリプトでは、文字列やタイピングの途中でクリックするか、キーボードのバックキーを使用してどちらかのいずれかの時点でテキストエリアの内容を編集(とCtrlすることができます+左矢印)。

IEでは、カーソルは常に最後にジャンプします。これはなぜですか、どうすれば防止できますか?


HTML:

<textarea id="bob" name="bob">Some textarea content</textarea> 
<div id="debug"></div> 

JS:

$(document).ready(function(){ 
    $("#bob").keyup(function(){ 
     $("#bob").val($("#bob").val().substring(0,160)); 
     $("#debug").append("\n+"); 
    }); 
}); 

答えて

3

、テキストの長さが160以上である場合にのみ、それを行う:<textarea>が変更されますたびIEでは、

$(document).ready(function(){ 
    var oldtext = $("#bob").val(); 

    $("#bob").keyup(function(){ 
     if($("#bob").val().length > 160) 
      $("#bob").val(oldtext); 
     else 
      oldtext = $("#bob").val(); 

     $("#debug").append("\n+"); 
    }); 
}); 

、カーソルが最後まで飛びます。

3

私はIEがテキストボックスの値をきれいにしてから、新しいテキストを挿入推測します。その結果、キャレットの位置が失われます。

あなたができることは、値を設定した後にキャレット位置をメモリに保存して復元することです:http://jsfiddle.net/pimvdb/tYXTX/3/。代わりに、毎回substring()を使用して$( "#ボブ")を切り捨てるの

$(document).ready(function(){ 
    $("#bob").keyup(function(){ 
     var caretPosition = $("#bob").prop("selectionStart"); // caret position 

     $("#bob").val($("#bob").val().substring(0,160)); 

     $("#bob").prop({selectionStart: caretPosition, // restore caret position 
         selectionEnd: caretPosition}); 
     // if start == end, it defines the caret position as selection length == 0 

     $("#debug").append("\n+"); 
    }); 
}); 
関連する問題