Op deze website gebruiken we cookies om content en advertenties te personaliseren, om functies voor social media te bieden en om ons websiteverkeer te analyseren. Ook delen we informatie over uw gebruik van onze site met onze partners voor social media, adverteren en analyse. Deze partners kunnen deze gegevens combineren met andere informatie die u aan ze heeft verstrekt of die ze hebben verzameld op basis van uw gebruik van hun services. Meer informatie.

Akkoord

Vraag & Antwoord

Webprogrammeren & scripting

javascript probleem?

Anne
6 antwoorden
  • Ik zit met het volgende probleem.
    Ik heb 2 pagina's. Een zogenaamd bestellings formulier, en een specificatie pagina. Deze specificatie pagina word geopend als men op verkoopprijs klikt in het bestellings formulier. In het specificatie scherm staan 22 editboxen, 10 tekst velden, 10 voor de prijzen, en 2 voor het totaal prijs.

    Nu is mijn vraag. Als er op opslaan word geklikt wil ik dat verkoopprijs (in bestelling formulier) meteen meeveranderd in de nieuwe waarde, zonder eerst een refresh te moeten doen..

    Ik ben een tijdje bezig geweest… Maar ik kom er niet uit.
    Alvast bedankt.
  • Je kan dit waarschijnlijk het beste met JavaScript DOM doen, maar dat zal wel enige oefening vereisen. Daarnaast moet je ook wel een redelijk "standards complient" pagina hebben om er normaal mee te kunnen werken.

    Het idee is dan om de prijzen in een apart "veld" te zetten in de vorm van een div, span, textfield of wat dan ook en deze een id toe te kennen. Met JavaScript DOM is het dan mogelijk om de inhoud van het element met de desbetreffende id op te vragen en indien nodig aan te passen.

    - Bas
  • Ik heb me nooit (bewust) bezig gehouden met dat DOM (misschien gebruik ik het al jaren, maar weet niet dat het door sommigen zo genoemd wordt) Wel heb ik ooit voor iemand zo'n compleet bestelformulier ontworpen. Inclusief vele subcategorieen en totalisatie per subcategorie enz. Compleet in JavaScript.
    Ik gebruikte daar zichtbare en onzichtbare invoervelden voor.
    Waarden in een veldje zetten gaat d.m.v.
    [code:1:cde6ca554e]document.formuliernaam.veldnaam.value = "xxxxx";[/code:1:cde6ca554e]
    De 'truuk' in het doorgeven van variabelen naar andere schermen zit in hetvolgende:
    van form2 (de geopende / specWindow) naar form1 gaat dit d.m.v. "opener….". Dit is dus het scherm wat form2 geopend heeft (form1 in dit geval). Vervolgens kun je van alle 'mogelijkheden' van dat scherm gebruik maken. Begint wel als DOM te klinken ;)
    [code:1:cde6ca554e]opener.document.bestel.totaal.value = "xxxxx";[/code:1:cde6ca554e]
    andersom kan dit door gebruik te maken van de 'schermnaam' die je het nieuwe window hebt gegeven.
    [code:1:cde6ca554e]specWindow.document.spec.a1.value = "xxxxx";[/code:1:cde6ca554e]
    Tot slot nog even heel beknopt de twee schermen, zodat je e.e.a. in praktijk kunt zien:
    form1.htm
    [code:1:cde6ca554e]<script language="JavaScript">
    function openSpec()
    {
    specWindow = window.open('form2.htm','specWin','width=400,height=400,left=200,top=200,status=Yes,scrollbars=Yes');
    }
    function openSpecValue()
    {
    openSpec();
    specWindow.document.spec.a1.value = 10;
    specWindow.document.spec.a2.value = 20;
    specWindow.reCalc();
    }
    </script>

    <a href="javascript:openSpec()">Open specificatie</a><br>
    <a href="javascript:openSpecValue()">Open specificatie met waarden</a><br>
    <form name="bestel">
    Totaal: <input type="text" name="totaal"><br>
    Totaal: E. <span id="totaaltekst">0</id>,=
    </form>[/code:1:cde6ca554e]
    form2.htm:
    [code:1:cde6ca554e]<form name="spec">
    A1: <input type="text" name="a1"><br>
    A2: <input type="text" name="a2"><br>
    —————————<br>
    Tot: <input type="text" name="tot" disabled ><br>
    <input type="button" onClick="reCalc()" value="Optellen">
    </form>

    <script language="JavaScript">
    function reCalc()
    {
    document.spec.tot.value = parseFloat(document.spec.a1.value) + parseFloat(document.spec.a2.value);
    opener.document.bestel.totaal.value = document.spec.tot.value;
    opener.document.getElementById('totaaltekst').innerHTML = document.spec.tot.value;
    }
    </script>[/code:1:cde6ca554e]

    Succes ermee !
  • Hardstikke bedankt!!!!

    nu werkt het :lol:
    (en daar heb ik dan zo moeilijk op lopen doen.) :oops:
  • Financial,

    Paar kleine dingen. language is verouderd. Gebruik liever type="text/javascript". Je maakt geen gebruik van het W3C DOM (af en toe wel).

    document.formname is net zoals document.images verouderd. Beter is zoiets als: document.getElementById('spec') (geef enkele Node terug) of document.getElement[b:faecf69ead]s[/b:faecf69ead]ByTagName('img') (geef een array Nodes terug).

    Ook innerHTML hoort op een andere manier opgelost te worden. Ook kun je beter niet gebruik maken van het javascript protocool: <a href="javascript:n();", maar beter van het onclick event: <a onclick="n();".
  • Bedankt ! denk ik.
    Ik zal me (als ik me weer eens op JS stort) weer eens verdiepen in deze nieuwe stijl.
    Nu lijkt me overigens wel dat de genoemde (nieuwe) notaties niet werken op de oude browsers ?
    Niet dat ik me daar veel van aantrek, maar toch even een kleine gedachte.

Beantwoord deze vraag

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.