webForumDet fria alternativet

Tabb i textarea

26 svar · 820 visningar · startad av saw

sawMedlem sedan mars 20011 883 inlägg
#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.

Peter SMedlem sedan dec. 20025 484 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);
    }
}
sawMedlem sedan mars 20011 883 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.

Peter SMedlem sedan dec. 20025 484 inlägg
#4

Bifogar ett exempel. Spara som .html och testa.

sawMedlem sedan mars 20011 883 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??

Peter SMedlem sedan dec. 20025 484 inlägg
#6

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

sawMedlem sedan mars 20011 883 inlägg
#7

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

Erik JuhlinMedlem sedan maj 20007 625 inlägg
#8

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

sawMedlem sedan mars 20011 883 inlägg
#9

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

@ndersMedlem sedan juni 200026 914 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

sawMedlem sedan mars 20011 883 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??

Peter SMedlem sedan dec. 20025 484 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);

}
sawMedlem sedan mars 20011 883 inlägg
#13

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

@ndersMedlem sedan juni 200026 914 inlägg
#14

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

Peter SMedlem sedan dec. 20025 484 inlägg
#15

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

sawMedlem sedan mars 20011 883 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...

Peter SMedlem sedan dec. 20025 484 inlägg
#17

Oh, yeah!

Peter SMedlem sedan dec. 20025 484 inlägg
#18

...

Peter SMedlem sedan dec. 20025 484 inlägg
#19

*inlägget uppdaterat igen*

sawMedlem sedan mars 20011 883 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?

Genererad på 363 ms · cache AV · v20260730165559-full.f96bc7eb