Hallo, ik ben al een tijdje met het volgende probleem aan het worstelen en ik hoop echt dat er hier een slimmerik is die me ermee kan helpen. Ik ben bezig met een wysiwyg editortje in een iframe. Nu kunnen gebruikers vaste elementen hierin plaatsen. Ze kunnen deze ook verslepen naar cellen die groter of gelijk zijn aan de grootte van dit vaste element.
Ik doe dit door op ondragstart de contentEditable property van alle kleinere cellen temporary op false te zetten. Dit werkt allemaal fantastisch, alleen kopieert hij het gesleepte element ipv verplaatsen.
Hieronder de code:
[index.htm]
[test.htm]
In dit voorbeeld kan je het vaste element wel naar de rechter cel slepen, maar niet naar de linkercel, aangezien deze te klein is. Wanneer ik het gesleepte element loslaat (ondragend) zet hij netjes alle contentEditables weer goed. Probleem is dat hij het gesleepte dus gekopieerd heeft. Zie ik wat doms over het hoofd? Het vreemde is dat tijdens het event window.event niet beschikbaar is. Is het uberhaupt wel mogelijk wat ik wil?
Ik doe dit door op ondragstart de contentEditable property van alle kleinere cellen temporary op false te zetten. Dit werkt allemaal fantastisch, alleen kopieert hij het gesleepte element ipv verplaatsen.
Hieronder de code:
[index.htm]
code:
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
31
32
| <html>
<head>
<script language="JavaScript">
function startDrag(element)
{
// haal de grootte van het element op.
start_resize_breedte= element.clientWidth;
// loop alle cellen langs en zet de cellen die smaller zijn contentEditable=false
var alle_cellen = foo.document.body.getElementsByTagName("TD");
for (i=0; i < alle_cellen.length; i++)
{
if(alle_cellen[i].width < start_resize_breedte)
{
alle_cellen[i].innerHTML = alle_cellen[i].innerHTML.replace('contentEditable=true','contentEditable=false temp');
}
}
}
function endDrag()
{
foo.document.body.innerHTML = foo.document.body.innerHTML.split('contentEditable=false temp').join('contentEditable=true');
}
</script>
</head>
<body>
<iframe name="foo" width="800" height="300" src="test.htm">
</iframe>
</body>
</html> |
[test.htm]
code:
1
2
3
4
5
6
7
| <table border="1" width="700" height="400">
<tr>
<td width="300" valign="top"><div contentEditable=true><p id="1" contentEditable=false style="width:200px;height:50px;background:#F2F2F2" onDragStart="parent.startDrag(this)" onDragEnd="parent.endDrag(this)">Vast Element</p></div></td>
<td width="100" valign="top"><div contentEditable=true></div></td>
<td width="200" valign="top"><div contentEditable=true></div></td>
</tr>
</table> |
In dit voorbeeld kan je het vaste element wel naar de rechter cel slepen, maar niet naar de linkercel, aangezien deze te klein is. Wanneer ik het gesleepte element loslaat (ondragend) zet hij netjes alle contentEditables weer goed. Probleem is dat hij het gesleepte dus gekopieerd heeft. Zie ik wat doms over het hoofd? Het vreemde is dat tijdens het event window.event niet beschikbaar is. Is het uberhaupt wel mogelijk wat ik wil?