webForumDet fria alternativet

Tabb i textarea

JavaScript

26 svar · 820 visningar · startad av saw

Medlem sedan mars 20011 880 inlägg
Frågan#1

Jag hittade en kodsnut, som skulle göra att man kunde tbba i en textarea, men jag får det inte att fungera...

<textarea rows="16" CLASS="SKUGGA" name="Lyrics" cols="64" 
onKeyDown="if( event.keyCode == 9) { InjectTab(this);return false};" >
</textarea>

function InjectTab(objTextArea)

{...}
{
    var objSelectedTextRange = document.selection.createRange();
    objSelectedTextRange.text = '    ' + objSelectedTextRange.text
}
</script>

Vad jag förstår så är det meningen att man skall kunna använda sig av
tabb-tangenten, men det går inte.

Medlem sedan dec. 20025 483 inlägg
#2

Vad är det som inte fungerar? Här är en FF-kompatibel version:

function InjectTab(objTextArea)
{
    if (document.selection && document.selection.createRange){
	var r = document.selection.createRange();
	r.text = "        ";
    } else if (objTextArea.selectionStart && objTextArea.selectionEnd){
	objTextArea.value = objTextArea.value.substring(0, objTextArea.selectionStart)
		+ "        "
		+ objTextArea.value.substring(objTextArea.selectionEnd);
    }
}
Medlem sedan mars 20011 880 inlägg
#3

Hej. Jag vet inte om jag gör fel, eller hoppas på "rätt sak", men tanken var ju att jag
skulle kunna använda mig av tabbar i en textarea med hjälp av tabb-tangenten.
Detta fungerar inte för mig ens med din fina kod.Vad som händer är att den markera klnappar adressfönster länkar osv, men någon tabbning i textarean det får jag inte.

Medlem sedan dec. 20025 483 inlägg
#4

Bifogar ett exempel. Spara som .html och testa.

Medlem sedan mars 20011 880 inlägg
#5

Hej Peter.
Jo men visst, dit script fungerar, det ser jag nu, men problemet har jag
märkt, är att jag har ett annat script, och det vill tydligen inte fungera ihop.

Så här ser det ut:

<script language="Javascript1.2"><!-- // load htmlarea
_editor_url = "";                     // URL to htmlarea files
var win_ie_ver = parseFloat(navigator.appVersion.split("MSIE")[1]);
if (navigator.userAgent.indexOf('Mac')        >= 0) { win_ie_ver = 0; }
if (navigator.userAgent.indexOf('Windows CE') >= 0) { win_ie_ver = 0; }
if (navigator.userAgent.indexOf('Opera')      >= 0) { win_ie_ver = 0; }
if (win_ie_ver >= 5.5) {
 document.write('<scr' + 'ipt src="' +_editor_url+ 'editor.js"');
 document.write(' language="Javascript1.2"></scr' + 'ipt>');
} else { document.write('<scr'+'ipt>function editor_generate() { return false; }</scr'+'ipt>'); }
// -->
</script>

Det här gör att jag lätt kan formatera texten, alltså en webbeditor.
Kan man ändra någonting här så att det fungerar??

Medlem sedan dec. 20025 483 inlägg
#6

Hur ser .js-filen ut som länkas in i ovanstående?

Medlem sedan mars 20011 880 inlägg
#7

Så här (som du ser så la jag till .txt för att kunna ladda upp filen.

Medlem sedan maj 200010 687 inlägg
#8

Är det i en WYSIWYG editor du vill kunna tabba?

Medlem sedan mars 20011 880 inlägg
#9

Ja det stämmer. Det hadde tillfört väldigt mycket om jag hadde kunnat tappa. Editorn
heter HTMLarea.

Medlem sedan juni 200032 967 inlägg
#10

Editorn heter HTMLarea.

Det hade tillfört mycket om du sagt det från början. ;-)

Eftersom jag också använder HTMLArea så noterade jag att det inte går att tabba hos mig heller, så då var det väl lika bra att fixa det, kan man tycka. I filen htmlarea.js finns ett bortkommenterat block som ser ut så här:

	/*
	else if (keyEvent) {
		// other keys here
		switch (ev.keyCode) {
		    case 13: // KEY enter
			// if (HTMLArea.is_ie) {
			this.insertHTML("<br />");
			HTMLArea._stopEvent(ev);
			// }
			break;
		}
	}
	*/

Precis efter det lade jag således till ett block:

	else if (keyEvent) {
		switch (ev.keyCode) {
		    case 9: // tab-stuff
			{ 
			this.insertHTML("&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;");
			HTMLArea._stopEvent(ev);
			break;
			}
			
		}
	}

Nu har jag visserligen ingen aning om huruvida detta kommer fungera i din version / implementation av HTMLArea, men jag tror det.

/a

Medlem sedan mars 20011 880 inlägg
#11

Hej och tack för att du försöker att hjälpa mig. Jag kan dock inte hitta det avsnittet
som du beskriver. Min produkt är:
htmlArea v2.03 - Copyright (c) 2002 interactivetools.com, inc.

Vad jag förstår så går det inte längre att hitta någon modernare vertin?
Är det kört nu??

Medlem sedan dec. 20025 483 inlägg
#12

Leta upp editor_event() och testa med att ersätta den med:

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;&nbsp;&nbsp;&nbsp;&nbsp;");
	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);

}
Medlem sedan mars 20011 880 inlägg
#13

Tyvärr, det hjälpte inte ;-(

Medlem sedan juni 200032 967 inlägg
#14

Vad händer / händer inte då?
Vad får du för felmeddelande (titta till exempel i javascriptkonsollen i firefox)

Medlem sedan dec. 20025 483 inlägg
#15

Det var jag som använde fel keyCode. Testa nu.

Medlem sedan mars 20011 880 inlägg
#16

Har du editerat ditt inlägg?

Nu såg jag felmedellandet:
Rad 429
Tecken 9
Fel 'objName' är odefinierad.
Kod 0

Jag utgår ifrån att det är en variabel som måste definieras, men jag kan som
sagt inte java...

Medlem sedan dec. 20025 483 inlägg
#17

Oh, yeah!

Medlem sedan dec. 20025 483 inlägg
#18

...

Medlem sedan dec. 20025 483 inlägg
#19

*inlägget uppdaterat igen*

Medlem sedan mars 20011 880 inlägg
#20

Tack, det börjar att fungera, men är inte helt ok.
Första gången som jag trycker på tabb-tangenten, du flyttar sig insättningspunkten i
textarean som den ska, men nästa gång jag trycker så blev det som innan, den flyttar focus till först mina knappar sen till länk osv. Går det att få bort detta?

259 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
120 ms — deklarationer (db)
0 ms — hämta statistik (cache)
135 ms — hämta tråd, inlägg och bilagor (db)
121 ms — ändringar (db)