2009-07-09 17 views
8

Bir textarea alanındaki sekme tuşuna basmak ve (doğru konumda) 4 boşluğu değiştirmek için tarayıcılar arası, güvenilir bir çözüm bilen var mı? Textarea bir makale yazmak için kullanılıyor ve bu özelliğe ihtiyacı var.TextArea'daki Sekmeleri Yakalama

Not: Sekmeler yakalamayan ve gereksinim duymadığım özellikleri olan FCKEditor'ı kullanmayı denedim. Sadece sekmeleri yakalamak için basit bir çözüm istiyorum.

+0

Muhtemelen çoğaltılamaz http://stackoverflow.com/questions/3362/capturing-tab-key-in-text-box – freitass

+1

(sekmeler dize ortasında meydana gelirse) çözümü inline çalışmıyor Ben – user122147

cevap

9

kapsamlı testimiz yoktu, ama bu iş gibi görünüyor:

<textarea id="text-area" rows="20" cols="100"></textarea> 

<script> 
document.getElementById("text-area").onkeydown = function(e) { 
    if (!e && event.keyCode == 9) 
    { 
    event.returnValue = false; 
    insertAtCursor(document.getElementById("text-area"), " "); 
    } 
    else if (e.keyCode == 9) 
    { 
    e.preventDefault(); 
    insertAtCursor(document.getElementById("text-area"), " "); 
    } 
}; 

//http://alexking.org/blog/2003/06/02/inserting-at-the-cursor-using-javascript#comment-3817 
function insertAtCursor(myField, myValue) { 
    //IE support 
    if (document.selection) { 
    var temp; 
    myField.focus(); 
    sel = document.selection.createRange(); 
    temp = sel.text.length; 
    sel.text = myValue; 
    if (myValue.length == 0) { 
     sel.moveStart('character', myValue.length); 
     sel.moveEnd('character', myValue.length); 
    } else { 
     sel.moveStart('character', -myValue.length + temp); 
    } 
    sel.select(); 
    } 
    //MOZILLA/NETSCAPE support 
    else if (myField.selectionStart || myField.selectionStart == '0') { 
    var startPos = myField.selectionStart; 
    var endPos = myField.selectionEnd; 
    myField.value = myField.value.substring(0, startPos) + myValue + myField.value.substring(endPos, myField.value.length); 
    myField.selectionStart = startPos + myValue.length; 
    myField.selectionEnd = startPos + myValue.length; 
    } else { 
    myField.value += myValue; 
    } 
} 
</script> 

EDIT (I http://alexking.org/blog/2003/06/02/inserting-at-the-cursor-using-javascript#comment-3817 kısmındaki "insertAtCursor" işlevini bulundu): Götürmezse yüzden senaryoyu Modifiye' jQuery'yi kullanın.

-1

Düzenleme tamamlandıktan sonra sekmeleri değiştirememenizin bir nedeni var mı? Bir textarea yazarken metnin yerini değiştirmekle biraz uğraştım ve en iyi ihtimalle pratik olmamaya karar verdim.

+2

düşünün. Buradaki nokta, kullanıcının sayfayı kullandığı sırada "sekme" ekleyebilmesidir, ancak varsayılan olarak sekme tuşu döngüleri bir sonraki öğeye odaklanır. – user122147

+0

Ardından, onkeydown'un tarayıcılar arası uygulamalarına giriyorsunuz. Bu, denemeye yetecek kadar cesur olmadığım bir şey. İyi şanslar! – Dave

0
<html> 
<head> 
    <script type="text/javascript"> 

     function keyHandler(e) { 
      var TABKEY = 9; 
      var backSlash = 8; 
      var code = e.keyCode ? e.keyCode : e.charCode ? e.charCode : e.which; 
      if(code == TABKEY && !e.shiftKey && !e.ctrlKey && !e.altKey) { 
      var val = document.getElementById("t1"); 
       val.value=(val.value).substring(0,getCaret(val)) + " " + (val.value).substring(getCaret(val)); 
       //document.getElementById("t1").value += " "; 

       if(e.preventDefault) { 
        e.preventDefault(); 
       } else { 
        e.returnValue = false; 
       } 
       val.focus(); 
       return false; 
      } 
      if(code == backSlash) { 
       var val = document.getElementById("t1"); 
       val.value=(val.value).substring(0,getCaret(val)-4) + (val.value).substring(getCaret(val)); 
       if(e.preventDefault) { 
        e.preventDefault(); 
       } else { 
        e.returnValue = false; 
       } 
       return false; 
      } 

     } 

     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; 
     } 
    </script> 
</head> 
<body> 
<textarea id="t1" onkeydown="javascript:keyHandler(event)"></textarea> 

</body> 
</hrml>