---
title: "Tabb i textarea"
type: "forum-thread"
url: "https://www.webforum.nu/amne/javascript/141052-tabb-i-textarea/page2"
topic: "JavaScript"
topic_url: "https://www.webforum.nu/amne/javascript"
author: "saw"
published: "2006-01-17T18:11:15.000Z"
updated: "2006-01-19T18:47:50.000Z"
replies: 26
views: 846
page: 2
pages: 2
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/javascript/141052-tabb-i-textarea"
---

# Tabb i textarea

_Sida 2 av 2._

## #21 — Peter S, 2006-01-18T19:53Z

Väldigt svårt att svara på. Du råkar inte ha en liveversion för allmän beskådning?

Permalänk: https://www.webforum.nu/p/1748168

## #22 — saw, 2006-01-18T19:57Z

Nej inte än, men jag har rarat de aktuella filerna så kan du se.

Bilagor:

- [EditVistext.rar](https://www.webforum.nu/a/9302.rar)

Permalänk: https://www.webforum.nu/p/1748171

## #23 — Peter S, 2006-01-18T21:04Z

Testa detta:

```
      if (ord == 9) {
        editor_insertHTML(objname, "&nbsp;&nbsp;");
	editEvent.cancelBubble = true;
	editEvent.returnValue = false;
	return;
      }
```

Det lustiga är att det läggs till två gånger så många mellanslag som anges; i ovanstående fall blir det alltså fyra.

Permalänk: https://www.webforum.nu/p/1748209

## #24 — saw, 2006-01-18T21:13Z

Tyvärr, ingen skillnad.

Permalänk: https://www.webforum.nu/p/1748216

## #25 — Peter S, 2006-01-18T21:20Z

För mig fungerar det. editor_event() ser ut så här:

```
function editor_event(objname,runDelay) {
  var config = document.all[objname].config;
  var editor_obj  = document.all["_" +objname+  "_editor"];       // html editor object
  if (runDelay == null) { runDelay = 0; }
  var editdoc;
  var editEvent = editor_obj.contentWindow ? editor_obj.contentWindow.event : event;

  // catch keypress events
    if (editEvent && editEvent.keyCode) {
      var ord       = editEvent.keyCode;    // ascii order of key pressed
      var ctrlKey   = editEvent.ctrlKey;
      var altKey    = editEvent.altKey;
      var shiftKey  = editEvent.shiftKey;

      if (ord == 16) { return; }  // ignore shift key by itself
      if (ord == 17) { return; }  // ignore ctrl key by itself
      if (ord == 18) { return; }  // ignore alt key by itself

      if (ord == 9) {
        editor_insertHTML(objname, "&nbsp;&nbsp;");
	editEvent.cancelBubble = true;
	editEvent.returnValue = false;
	return;
      }

       // cancel ENTER key and insert <BR> instead
       //if (ord == 13 && editEvent.type == 'keypress') {
       //  editEvent.returnValue = false;
       //  editor_insertHTML(objname, "<br>");
       //  return;
       //}

      if (ctrlKey && (ord == 122 || ord == 90)) {     // catch ctrl-z (UNDO)
//      TODO: Add our own undo/redo functionality
//        editEvent.cancelBubble = true;
        return;
      }
      if ((ctrlKey && (ord == 121 || ord == 89)) ||
          ctrlKey && shiftKey && (ord == 122 || ord == 90)) {     // catch ctrl-y, ctrl-shift-z (REDO)
//      TODO: Add our own undo/redo functionality
        return;
      }
    }

  // setup timer for delayed updates (some events take time to complete)
  if (runDelay > 0) { return setTimeout(function(){ editor_event(objname); }, runDelay); }

  // don't execute more than 3 times a second (eg: too soon after last execution)
  if (this.tooSoon == 1 && runDelay >= 0) { this.queue = 1; return; } // queue all but urgent events
  this.tooSoon = 1;
  setTimeout(function(){
    this.tooSoon = 0;
    if (this.queue) { editor_event(objname,-1); };
    this.queue = 0;
    }, 333);  // 1/3 second

  editor_updateOutput(objname);
  editor_updateToolbar(objname);

}
```

Permalänk: https://www.webforum.nu/p/1748221

## #26 — Peter S, 2006-01-19T11:18Z

Anledningen till att det läggs dubbelt så många mellanslag som angivits, är förstås att flera onkey*dir*\-händelser avfyras. Den slutliga koden ser därför ut så här:

```
function editor_event(objname,runDelay) {
  var config = document.all[objname].config;
  var editor_obj  = document.all["_" +objname+  "_editor"];       // html editor object
  if (runDelay == null) { runDelay = 0; }
  var editdoc;
  var editEvent = editor_obj.contentWindow ? editor_obj.contentWindow.event : event;

  // catch keypress events
    if (editEvent && editEvent.keyCode) {
      var ord       = editEvent.keyCode;    // ascii order of key pressed
      var ctrlKey   = editEvent.ctrlKey;
      var altKey    = editEvent.altKey;
      var shiftKey  = editEvent.shiftKey;

      if (ord == 16) { return; }  // ignore shift key by itself
      if (ord == 17) { return; }  // ignore ctrl key by itself
      if (ord == 18) { return; }  // ignore alt key by itself

      if (ord == 9 && editEvent.type.toLowerCase() == "keydown") {
        editor_insertHTML(objname, "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;");
	editEvent.cancelBubble = true;
	editEvent.returnValue = false;
	return;
      }

       // cancel ENTER key and insert <BR> instead
       //if (ord == 13 && editEvent.type == 'keypress') {
       //  editEvent.returnValue = false;
       //  editor_insertHTML(objname, "<br>");
       //  return;
       //}

      if (ctrlKey && (ord == 122 || ord == 90)) {     // catch ctrl-z (UNDO)
//      TODO: Add our own undo/redo functionality
//        editEvent.cancelBubble = true;
        return;
      }
      if ((ctrlKey && (ord == 121 || ord == 89)) ||
          ctrlKey && shiftKey && (ord == 122 || ord == 90)) {     // catch ctrl-y, ctrl-shift-z (REDO)
//      TODO: Add our own undo/redo functionality
        return;
      }
    }

  // setup timer for delayed updates (some events take time to complete)
  if (runDelay > 0) { return setTimeout(function(){ editor_event(objname); }, runDelay); }

  // don't execute more than 3 times a second (eg: too soon after last execution)
  if (this.tooSoon == 1 && runDelay >= 0) { this.queue = 1; return; } // queue all but urgent events
  this.tooSoon = 1;
  setTimeout(function(){
    this.tooSoon = 0;
    if (this.queue) { editor_event(objname,-1); };
    this.queue = 0;
    }, 333);  // 1/3 second

  editor_updateOutput(objname);
  editor_updateToolbar(objname);

}
```

Permalänk: https://www.webforum.nu/p/1751355

## #27 — saw, 2006-01-19T18:47Z

Tack alla för all hjälp.

Permalänk: https://www.webforum.nu/p/1751555

---

Tråden på webben: https://www.webforum.nu/amne/javascript/141052-tabb-i-textarea/page2  
Föregående sida: https://www.webforum.nu/amne/javascript/141052-tabb-i-textarea.md
