[javascript]function anonymus & pasteHTML

Pagina: 1
Acties:

  • Jaspertje
  • Registratie: September 2001
  • Laatst online: 18-05 15:53

Jaspertje

Max & Milo.. lief

Topicstarter
Gotters,

Ik ben bezig om een online teksteditor te bouwen. Ik heb een heleboel mooie oplossingen gevonden en gebruik ook veel van die code. Ik zit nu alleen met een probleem.

Ik gebruik een overlib die wordt aangeroepen met een onmouseover. Heel simpel
ds('Deze tekst komt dan tevoorschijn'). Heel simpel, standaard javascript. Werkt perfect.

de code ziet er dan zo uit:
HTML:
1
onmouseover="ds('Deze tekst komt dan tevoorschijn');"


Nu kan dit ook door mensen worden toegevoegd. Dit gebeurt in een popup waar nog wat meer properties kunnen worden meegegeven.
Daarna ga ik het toevoegen in de tekst en dat doe ik met pasteHTML.

Dit heeft de goede eigenschap dat het alles valid HTML maakt. Alleen mijn functies ook. Als ik naar de source kijk zie ik het volgende verschijnen:

HTML:
1
2
3
4
onmouseover="function anonymous()
{
ds('assaddas'); 
}"

Dit is niet de bedoeling en bovendien klapt ie.

Weet iemand een oplossing want ik zit me al drie uur rot te staren op dit probleem. Een aantal oplossingen die niet helpen (ipv alleen ds('tekst'):
- function ds('tekst');
- function ds('tekst') {};

  • mpegernie
  • Registratie: November 2000
  • Laatst online: 12-03-2016

mpegernie

.mpe

opnieuw ds als functie declareren, wat je dus doet met function ds() {} lijkt me niet handig ;)

Wat je 'popup' ervan maakt (voor zover ik je verhaal begrijp), lijkt me prima. Zet het alleen ff achter elkaar, dus function anonymous() {ds('txt');} of als echte anonieme functie: function () {ds('text')}.

Helpt dit? je probeert dus te voorkomen dat je proggie er zelf functie voor gaat zetten oid?

[ Voor 7% gewijzigd door mpegernie op 02-07-2004 15:57 ]

"The Major advances in civilization are processes that all but wreck the societies in which they occur." -A. N. Whitehead


  • Jaspertje
  • Registratie: September 2001
  • Laatst online: 18-05 15:53

Jaspertje

Max & Milo.. lief

Topicstarter
mpegernie schreef op 02 juli 2004 @ 15:57:
opnieuw ds als functie declareren, wat je dus doet met function ds() {} lijkt me niet handig ;)

Wat je 'popup' ervan maakt (voor zover ik je verhaal begrijp), lijkt me prima. Zet het alleen ff achter elkaar, dus function anonymous() {ds('txt');} of als echte anonieme functie: function () {ds('text')}.

Helpt dit? je probeert dus te voorkomen dat je proggie er zelf functie voor gaat zetten oid?
nope, dat is niet de oplossing :'(

[ Voor 4% gewijzigd door Jaspertje op 02-07-2004 16:25 ]


  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

De enige echte oplossing is imo niet met pasteHTML maar met DOM te gaan werken, en daar vervolgens de HTML van op te vragen (als je die later wilt gebruiken, lijkt me niet onhandig ;)).

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Verwijderd

Jaspertje schreef op 02 juli 2004 @ 15:25:
Gotters,

knip

HTML:
1
2
3
4
onmouseover="function anonymous()
{
ds('assaddas'); 
}"
Wat gebeurt hier nou? Wanneer je met je muis over het object gaat wordt er een functie "anonymous" gedefineerd. Die functie wordt dus niet uitgevoerd...
drm schreef op 02 juli 2004 @ 16:43:
De enige echte oplossing is imo niet met pasteHTML maar met DOM te gaan werken, en daar vervolgens de HTML van op te vragen (als je die later wilt gebruiken, lijkt me niet onhandig ;)).
Wat is er mis het pasteHTML? Okey het gaat niet werken in Gecko, maar daar hebben we een oplossing voor :Y)

Even een copy-paste uit de NextAvenue broncode:

JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
NextAvenue.prototype.insertHTML = function(sHtml) {
  var n = nextavenue, s = nextavenue.getSelection();
  var r = nextavenue.getRange();
  n.getFrame().focus();

  if (n.browser.isIE) {
    if ((s.type + "").toLowerCase() == "control") {
      r(0).insertAdjacentHTML("beforeBegin", html);
      r(0).removeNode(true);
    } else {
      r.pasteHTML(sHtml);
    }
  } else if (n.browser.isGecko) {
    // Remove the current selection and insert all Childs 
    // of the created DIV element
    var o = document.createElement("div");
    o.innerHTML = sHtml;
    r.deleteContents();
    var i = 0;
    while (i < o.childNodes.length) {
      r.insertNode(o.childNodes[i++]);
    }
  }
};

  • Jaspertje
  • Registratie: September 2001
  • Laatst online: 18-05 15:53

Jaspertje

Max & Milo.. lief

Topicstarter
Goed, ben na het weekend nog steeds met het probleem bezig. Het probleem is nog niet weg ben ik bang. Ik zal een extra stukje code posten, en kijken of iemand het probleem vindt, want ik snap er helemaal niks van:

HTML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
                        var doc = editor._doc;
                        // create the table element
                        var a = doc.createElement("a");
                            a.setAttribute("href",param["url"]);
                            a.setAttribute("cursor",param["cursor"]);
                            a.setAttribute("onMouseOver",param["onMouseOver"]);
                            a.setAttribute("onMouseOut",param["onMouseOut"]);
                            
                        //  a.createTextNode(param["linktext"]);
                        
                            // now some text
                        var TextBetweenTags = doc.createTextNode(param["linktext"]);
                            a.appendChild(TextBetweenTags);
                        
                        alert(a.outerHTML)  
                            
                        if (HTMLArea.is_ie) {
                            range.pasteHTML(a.outerHTML);
                        } else {
                            // insert the table
                            editor.insertNodeAtSelection(a);
                        }


Alle attributen worden goed gezet. En de alert die op regel 15 staat geeft het volgende terug:
<a href="javascript:void(0)" style="cursor:hand;" onMouseOver="ds('test');" onMouseOut="nd();">img</a>

Dit is dus de html die ik wil hebben. Vooral het onmouseover en onmouseout zijn belangrijk..

Als ik daarna in de editor ga kijken (via de source) zie ik het volgende:
<a onmouseover="function anonymous(){ds('test');}" style="CURSOR: help" onmouseout="function anonymous() {nd();}" href="javascript:void(0);">img</a>

Hier zit dus wel een function anonymus() {} in. Zou dit echt komen door de pasteHTML of zie ik iets anders over het hoofd. Het werkt overigens niet met die function anonymus!


toevoeging
Kom er net achter dat het wel goed in de XML staat (daarin wordt het opgeslagen). Heeft een textare een eigen javascript control?

[ Voor 14% gewijzigd door Jaspertje op 05-07-2004 10:25 ]


Verwijderd

Wat jou probleem veroorzaakt is mij niet duidelijk. Eerlijk gezegd snap ik er geen bal van. Zowel IE 5.5 als 6.0 doen het perfect met dat stukje code in mijn editor NextAvenue. Ik ben dus geneigd om te zeggen dat in dit stuk code niet het probleem zit. Kan je niet je hele editor online zetten, zodat ik er wat beter naar kan kijken?

  • Jaspertje
  • Registratie: September 2001
  • Laatst online: 18-05 15:53

Jaspertje

Max & Milo.. lief

Topicstarter
Verwijderd schreef op 05 juli 2004 @ 10:57:
Wat jou probleem veroorzaakt is mij niet duidelijk. Eerlijk gezegd snap ik er geen bal van. Zowel IE 5.5 als 6.0 doen het perfect met dat stukje code in mijn editor NextAvenue. Ik ben dus geneigd om te zeggen dat in dit stuk code niet het probleem zit. Kan je niet je hele editor online zetten, zodat ik er wat beter naar kan kijken?
Nee, ik kan de editor niet online zetten. En het probleem is, dat ie 'zomaar' function anonymous eromheen zet. En dan werken de functies niet meer, maar ik ben alweer iets verder om het geheim van de toevoegingen te ontrafelen

Goed, het probleem is opgelost, hoe het precies zit weet ik niet, het heeft iig niks met pasteHTML te maken. Er werd elders in de code iets gedaan waardoor elke keer een extra functie eromheen werd gezet. Het werkt

[ Voor 17% gewijzigd door Jaspertje op 05-07-2004 12:18 ]

Pagina: 1