2009-07-09 4 views
8

में टैब को पकड़ना क्या किसी को टेक्स्टरेरा फ़ील्ड में टैब-कुंजी के प्रेस को पकड़ने के लिए एक क्रॉस-ब्राउज़र, विश्वसनीय समाधान पता है, और 4 रिक्त स्थान (सही स्थिति में) को बदलने के लिए? टेक्स्टरा का उपयोग निबंध इनपुट करने के लिए किया जा रहा है, और इस सुविधा की आवश्यकता है।टेक्स्टएरिया

नोट: मैंने FCKEditor का उपयोग करने की कोशिश की, दूसरों के बीच, जिसमें टैब नहीं पकड़े और सुविधाओं की एक गुच्छा थी जिसकी मुझे आवश्यकता नहीं थी। मैं सिर्फ टैब पकड़ने के लिए एक सरल समाधान चाहता हूँ।

+0

संभवतः दोहराया http://stackoverflow.com/questions/3362/capturing-tab-key-in-text-box – freitass

+1

समाधान इनलाइन काम नहीं करता है कि (यदि टैब स्ट्रिंग के मध्य में होते हैं) मैं लगता है कि – user122147

उत्तर

9

मैं बड़े पैमाने पर परीक्षण नहीं किया था, लेकिन यह काम करने के लिए लगता है:

<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> 

संपादित (मैं http://alexking.org/blog/2003/06/02/inserting-at-the-cursor-using-javascript#comment-3817 पर "insertAtCursor" समारोह पाया जाता है): स्क्रिप्ट संशोधित तो यह नहीं करता है ' jQuery का उपयोग नहीं करते हैं।

-1

क्या कोई कारण है कि संपादन के बाद टैब को प्रतिस्थापित नहीं कर सकते हैं? मैंने टेक्स्टरेरा में टाइप करते समय टेक्स्ट को प्रतिस्थापित करने के साथ काफी कुछ खेला है, और इसे पाया है ... सर्वोत्तम रूप से अव्यवहारिक।

+2

बिंदु यह है कि उपयोगकर्ता पृष्ठ का उपयोग करते समय "टैब" डालने में सक्षम होना चाहिए, लेकिन डिफ़ॉल्ट रूप से टैब कुंजी चक्र अगले तत्व पर ध्यान केंद्रित करते हैं। – user122147

+0

फिर आप ऑनकीडाउन के क्रॉस-ब्राउज़र कार्यान्वयन में शामिल हो रहे हैं, जो कुछ ऐसा करने के लिए पर्याप्त बहादुर नहीं रहा है। सौभाग्य! – 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>