[fixed] tab oplossing
Het is niet door mij gemaakt, ik heb gezocht waar ik hem wel vandaan heb maar kon het zo niet meer vinden.
Het werkt met een javascript dat in een textarea op de volgende manier word aangeroepen:
<textarea onkeydown="insertTab(this, event)></textarea>
De javascript is als volgt:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
function insertTab(o, e)
{
var kC = e.keyCode ? e.keyCode : e.charCode ? e.charCode : e.which;
if (kC == 9 && !e.shiftKey && !e.ctrlKey && !e.altKey)
{
var oS = o.scrollTop;
if (o.setSelectionRange)
{
var sS = o.selectionStart;
var sE = o.selectionEnd;
o.value = o.value.substring(0, sS) + "\t" + o.value.substr(sE);
o.setSelectionRange(sS + 1, sS + 1);
o.focus();
}
else if (o.createTextRange)
{
document.selection.createRange().text = "\t";
e.returnValue = false;
}
o.scrollTop = oS;
if (e.preventDefault)
{
e.preventDefault();
}
return false;
}
return true;
}
{
var kC = e.keyCode ? e.keyCode : e.charCode ? e.charCode : e.which;
if (kC == 9 && !e.shiftKey && !e.ctrlKey && !e.altKey)
{
var oS = o.scrollTop;
if (o.setSelectionRange)
{
var sS = o.selectionStart;
var sE = o.selectionEnd;
o.value = o.value.substring(0, sS) + "\t" + o.value.substr(sE);
o.setSelectionRange(sS + 1, sS + 1);
o.focus();
}
else if (o.createTextRange)
{
document.selection.createRange().text = "\t";
e.returnValue = false;
}
o.scrollTop = oS;
if (e.preventDefault)
{
e.preventDefault();
}
return false;
}
return true;
}
Gewijzigd op 15/08/2010 14:18:59 door B a s
Meer mensen hier behoefte aan?
Ja, doen :-)
Ik ben voorstander :)
Gewijzigd op 04/08/2010 22:24:03 door Dalando De Zuil
Hoe bouw je hier een vinkje voor in JS dat als die aanstaat hij de tabs wel pakt, en anders niet? Ik denk dat sommige mensen dit liever ook niet hebben om door te skippen naar de submit knop.
Code (php)
1
2
3
2
3
var capture_tab_toggle = document.getElementById('capture_tab_toggle');
if(!capture_tab_toggle.checked)
return true;
if(!capture_tab_toggle.checked)
return true;
en ergens een checkbox met id="capture_tab_toggle" toevoegen. Maar misschien is het overzichtelijker om niet het reactieformulier hiermee ingewikkelder te maken, maar het gewoon bij voorkeuren te zetten? Dan kan je het onkeydown attribuut wel met PHP toevoegen.
Precies. Bij de voorkeuren aan of uit kunnen zetten was het idee inderdaad. Dan kan ik gewoon doen, als hij geset is, zet dan de JS variabele capture_tab_toggle right?
Even denken, aangezien je prototype.js gebruikt, zou dat dan iets worden in de richting van...
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
$(window).observe('load', function() {
var insertTab = function(e)
{
var o = Event.element(e);
var kC = e.keyCode ? e.keyCode : e.charCode ? e.charCode : e.which;
if (kC == 9 && !e.shiftKey && !e.ctrlKey && !e.altKey)
{
var oS = o.scrollTop;
if (o.setSelectionRange)
{
var sS = o.selectionStart;
var sE = o.selectionEnd;
o.value = o.value.substring(0, sS) + "\t" + o.value.substr(sE);
o.setSelectionRange(sS + 1, sS + 1);
o.focus();
}
else if (o.createTextRange)
{
document.selection.createRange().text = "\t";
e.returnValue = false;
}
o.scrollTop = oS;
Event.stop(e);
}
}
$$('textarea').each(function(textarea) {
textarea.observe('keydown', insertTab);
});
});
var insertTab = function(e)
{
var o = Event.element(e);
var kC = e.keyCode ? e.keyCode : e.charCode ? e.charCode : e.which;
if (kC == 9 && !e.shiftKey && !e.ctrlKey && !e.altKey)
{
var oS = o.scrollTop;
if (o.setSelectionRange)
{
var sS = o.selectionStart;
var sE = o.selectionEnd;
o.value = o.value.substring(0, sS) + "\t" + o.value.substr(sE);
o.setSelectionRange(sS + 1, sS + 1);
o.focus();
}
else if (o.createTextRange)
{
document.selection.createRange().text = "\t";
e.returnValue = false;
}
o.scrollTop = oS;
Event.stop(e);
}
}
$$('textarea').each(function(textarea) {
textarea.observe('keydown', insertTab);
});
});
Hij zegt '$(window).observe is not a function'? Ik ben helemaal niet zo'n ster in JS :)
Gewijzigd op 14/08/2010 20:36:30 door Jelmer -
Toevoeging op 14/08/2010 20:46:10:
Staat nu bij voorkeuren en is in te stellen, thanks Jelmer.
PS: Nu ging ik alweer gelijk de fout in om op tab te drukken om te submitten ;)