Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[JS] 3 vragen over Javascript

Pagina: 1
Acties:

  • Thomasv6
  • Registratie: December 2007
  • Laatst online: 08:38
Hallo allemaal,

Ik was bezig met een stuk Javascript voor me site, hetzelfde wat ze hier op Tweakers.net ook gebruiken om je reactie te bewerken. Alleen kwam ik met een paar moeilijkheden te zitten.
  1. FireFox zet er ong. 5 tabs voor als je het in een textarea verandert.
  2. Hij geeft geen enters weer, maar een simpele <BR>
  3. Hoe zorg ik ervoor, dat als er 2x op hetzelfde wordt gedrukt (Dus met het zelfde id) dat die dan de 2e keer iets anders doet.
Ik had dit al gescript:

code:
1
2
3
4
5
6
7
8
9
10
11
12
function bewerk(id){
    var getal   =   0;
    
    if (getal == 0){
        var bericht =   document.getElementById('nieuws[' + id + ']').innerHTML;
        document.getElementById('nieuws[' + id + ']').innerHTML = '<textarea name="" style="width: 500px; height: 300px;">' + bericht + '</textarea>';
        var getal   =   1;
    }
    else{
        
    }
}


Het enige wat hier eigenlijk maar van werkt is het volgende:

code:
1
2
3
4
5
function bewerk(id){

                                var bericht =   document.getElementById('nieuws[' + id + ']').innerHTML;
        document.getElementById('nieuws[' + id + ']').innerHTML = '<textarea name="" style="width: 500px; height: 300px;">' + bericht + '</textarea>';
        var getal   =   1;


Wie kan mij verder helpen?

Mvg. Thomas

  • TERW_DAN
  • Registratie: Juni 2001
  • Niet online

TERW_DAN

Met een hamer past alles.

Ik zou die innerHTML eens vervangen door innerText. Als ik me niet vergis (kan het morgen op m'n werk wel even nakijken, gezien ik daar wel de juiste software/documentatie heb) heb je dan gewoon de text die je moet hebben, zonder de HTML tags die je wel hebt met innerHTML.

Ik heb het ooit ook eens gebruikt op die manier, maar meer dan een schopje in de richting kan ik je nu niet geven, weet het echt niet meer uit m'n hoofd :P

  • Thomasv6
  • Registratie: December 2007
  • Laatst online: 08:38
Met innerText werkt wel, alleen zit je dan met het volgende probleem, dat die de ubb tags e.d. er ook uitfiltert. En alleen maar de text geeft.

Tevens lost innerText het FireFox probleem ook op.

  • krvabo
  • Registratie: Januari 2003
  • Laatst online: 15:16

krvabo

MATERIALISE!

Het -makkelijkste- (niet de meest charmante) manier om alles op te lossen is om gebruik te maken van:

1) Je normale html-weergave in een "container"-element (td, p, div, etc) met een uniek id per reactie
2) Naast dit hierboven een textarea gevuld met de juiste ubb etc die je met css Display: none; geeft. (en uiteraard een id met dezelfde reactieID als hierboven)

Zo kun je makkelijk met javascript de display: block; en display: none; toggelen. (dus je maakt de ene onzichtbaar en laat de andere zien)

Mooier is waarschijnlijk alles met AJAX (of iets vergelijkbaars) op te halen, maar ik denk dat dit je niveau te boven gaat.
Antwoorden op je vragen:
# Hij geeft geen enters weer, maar een simpele <BR>
Op te lossen met reguliere expressies (regex), let er hierbij op dat javascript geen ondersteuning heeft voor /g geloof ik (global) dus moet je elke regel doorlopen
# Hoe zorg ik ervoor, dat als er 2x op hetzelfde wordt gedrukt (Dus met het zelfde id) dat die dan de 2e keer iets anders doet.
Gewoon heel simpel een variabele zetten waarvan je controleert of die true of false is?

Pong is probably the best designed shooter in the world.
It's the only one that is made so that if you camp, you die.


  • Thomasv6
  • Registratie: December 2007
  • Laatst online: 08:38
Dat ik daar nooit eerder aan heb gedacht, gewoon met hide enzo. Zoals je zelf al zij niet de beste manier, maar wel de makkelijkste. AJAX kan ik een beetje, dat wil zeggen het posten en ophalen van gegevens lukt wel een beetje, maar meer ook niet.

  • krvabo
  • Registratie: Januari 2003
  • Laatst online: 15:16

krvabo

MATERIALISE!

Nouja als het ophalen van gegevens je lukt dan moet dat toch wel lukken?

Je roept via een AJAX-request een phppagina aan die je de waarde geeft van het originele veld in de database. Eventueel kun je in die phpfile nog wat dingen parsen/veranderen, en output je het. De ajax-request krijgt die waarde terug.
Dan verwijder je de originele waarde uit de 'htmlpagina' waar het over ging en output je de textarea met de waarde die de AJAX-request teruggaf.
Om de waarde te laten zien ipv de textarea zul je het natuurlijk andersom moeten doen :)

[ Voor 5% gewijzigd door krvabo op 04-12-2007 21:19 ]

Pong is probably the best designed shooter in the world.
It's the only one that is made so that if you camp, you die.


  • Thomasv6
  • Registratie: December 2007
  • Laatst online: 08:38
Ja, maar dan moet ik ook het id enzo meegeven in het javascript gedeelte van het AJAX gebeuren maar dat wou niet lukken.

Nu is mijn vraag, hoe maak je een javascript, zodat die de eerste keer de actie uitvoert, en de 2e keer niet. Want zoals ik al liet zien in het startbericht wou het mij niet lukken. Dit heb ik als enige nog nodig eigenlijk.

  • krvabo
  • Registratie: Januari 2003
  • Laatst online: 15:16

krvabo

MATERIALISE!

JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
var doeEenmaal = false;

function bar() { }

function getID() {
  if (doeEenmaal == false) {
    // voer deze code uit
    doeEenmaal = true; // zet de var op true zodat het maar 1x wordt gedaan
  }
}

function foo() { }

Uiteraard kun je als ie true is hem ook weer op false zetten, zo kun je toggelen.
Het gaat er zegmaar om dat je een variabele gebruikt met een globale scope en die variabele in de functie veranderd. Let er wel op dat de naamgeving hier niet echt handig is gekozen, maar het is alleen als voorbeeld :)

Pong is probably the best designed shooter in the world.
It's the only one that is made so that if you camp, you die.


Verwijderd

waarom globaal? Probeer dat zoveel mogelijk te vermijden, zeker in een tijd waar een hoop 3rd party scripts gebruikt worden die toch al het global object volplempen

JavaScript:
1
2
3
4
5
6
function getID() {
  if (!getID.done) {
    //stuff
    getID.done=true;
  }
}

  • SPee
  • Registratie: Oktober 2001
  • Laatst online: 28-11 18:54
Omdat de var getal = 0; in je methode staat, zal getal == 0 altijd true zijn en worden uitgevoerd. (als ik mij niet vergis :) )

let the past be the past.


  • krvabo
  • Registratie: Januari 2003
  • Laatst online: 15:16

krvabo

MATERIALISE!

Verwijderd schreef op dinsdag 04 december 2007 @ 22:13:
waarom globaal? Probeer dat zoveel mogelijk te vermijden, zeker in een tijd waar een hoop 3rd party scripts gebruikt worden die toch al het global object volplempen
Nja je hebt uiteraard gelijk dat jouw oplossing netter is :)
Ik wist eerlijk gezegd niet dat je dit op deze manier kon oplossen, weer wat geleerd :)

Pong is probably the best designed shooter in the world.
It's the only one that is made so that if you camp, you die.

Pagina: 1