Avatar billede Slettet bruger
18. august 2006 - 10:41 Der er 12 kommentarer og
1 løsning

Print kun udfyldte felter

Jeg har en ASP formular hvor jeg i toppen har dette script:
<script language="JavaScript" type="text/javascript">
<!--
function makePrintout() {
if (window.print) { /* Avoids errors */
window.print();
}
}

//-->
</script>
og det printer jo hele siden som den ser ud. Men jeg vil gerne have det udvidet eller lavet et nyt, således at det kun er de udfyldte felter på formularen der bliver printet ud, kan man det?
Avatar billede thesurfer Nybegynder
18. august 2006 - 12:35 #1
<script language="JavaScript" type="text/javascript">
<!--
function makePrintout()
{
    data = "";
    if (window.print)
    { /* Avoids errors */

        el = document.frmPrint.elements;
        for(i=0; i < el.length; i++)
        {
            if (el[i].value.length > 0) data += el[i].name + ": " + el[i].value + "<br>";
        }
    }
    if (data.length < 1)
    {
        alert("Udfyld venligst formularen");
    } else {
        data = data.substring(0, data.length - "<br>".length); // fjern det sidste linieskift

        js = "";
        js += '<' + 'scr' + 'ipt type="text/JavaScript" language="JavaScript">';
        js += 'if (window.print) window.print();';
        js += '</' + 'script' + '>';

        // hvis url er lig "", virker ikke i Opera. Hvis url er lig "about:blank", virker det ikke i FireFox:
        url = (navigator.userAgent.toLowerCase().indexOf("opera") > -1)?"about:blank":"";

        w = window.open(url,'w','');
        w.document.body.innerHTML = data;
        w.print();
    }
}

//-->
</script>

<form name="frmPrint" onsubmit="return false; //submitter IKKE!">
Navn: <input type="text" name="Navn" value="Hans Hansen">
<br>
Adresse: <input type="text" name="Adresse">
<br>
Telefon: <input type="text" name="Telefon">
<br>
</form>
<a href="#" onclick="makePrintout();return false;">udskrift af de indtastede data</a>
Avatar billede thesurfer Nybegynder
18. august 2006 - 12:36 #2
Sådan (har ryddet lidt op i koden):

<script language="JavaScript" type="text/javascript">
<!--
function makePrintout()
{
    data = "";
    if (window.print)
    { /* Avoids errors */

        el = document.frmPrint.elements;
        for(i=0; i < el.length; i++) if (el[i].value.length > 0) data += el[i].name + ": " + el[i].value + "<br>";
    }

    if (data.length < 1)
    {
        alert("Udfyld venligst formularen");
    } else {
        data = data.substring(0, data.length - "<br>".length); // fjern det sidste linieskift

        // hvis url er lig "", virker ikke i Opera. Hvis url er lig "about:blank", virker det ikke i FireFox:
        url = (navigator.userAgent.toLowerCase().indexOf("opera") > -1)?"about:blank":"";

        w = window.open(url,'w','');
        w.document.body.innerHTML = data;
        w.print();
    }
}

//-->
</script>

<form name="frmPrint" onsubmit="return false; //submitter IKKE!">
Navn: <input type="text" name="Navn" value="Hans Hansen">
<br>
Adresse: <input type="text" name="Adresse">
<br>
Telefon: <input type="text" name="Telefon">
<br>
</form>
<a href="#" onclick="makePrintout();return false;">udskrift af de indtastede data</a>
Avatar billede Slettet bruger
18. august 2006 - 12:48 #3
Jeg får en fejl når jeg tester.
Fejl: et objekt er obligatorisk.
og det er denne linie der fejler:
w.document.body.innerHTML = data;
Avatar billede Slettet bruger
18. august 2006 - 12:53 #4
Har fundet fejlen, det var fordi jeg havde blokeret for popup.
Kan du forklare lidt om hvad det er den sidste del gør - fra form name. Hvorfor er der tre felter på den side, skal jeg ikke bare have denne linie "udskrift af de indtastede data" så får jeg i hvert fald navn på printudskriten men ikke telefon og adresse ? Håber det er forståeligt
Avatar billede thesurfer Nybegynder
18. august 2006 - 12:59 #5
Jeg skriver lige kommentar til linierne..
Avatar billede Slettet bruger
18. august 2006 - 13:00 #6
Jeg tror ikke jeg har forklaret godt nok. Jeg har en asp side hvor man udfylder formularen og klikker så på Send, så får man bekræft_siden.asp og det er denne side jeg gerne vil have en "printknap" på som henter de udfyldte felter fra den første side og kun dem.
Avatar billede thesurfer Nybegynder
18. august 2006 - 13:06 #7
<!--

Du skal indsætte formens navn, i JavaScript her: document.FormensNavn.elements
Samme navn skal du indsætte i formen, i HTML koden: <form name="FormensNavn"
Der skal stå det samme begge steder!

Det er lige meget hvor mange felter du har.

Jeg har tilføjet et check, så den kun tager felter af typen "textbox".

-->

<script language="JavaScript" type="text/javascript">
<!--
function makePrintout()
{
    data = "";
    if (window.print)
    { /* Avoids errors */

        el = document.frmPrint.elements; // tilføj alle formens elementer til variablen "el"
        for(i=0; i < el.length; i++) // løb samtlige elementer igennem
        {
            // hvis det nuværende elemenet er en textbox og feltet indeholder noget, tilføj navn og værdi til variablen "data"
            if (el[i].type == "text" && el[i].value.length > 0) data += el[i].name + ": " + el[i].value + "<br>";
        }
    }

    if (data.length == 0) // hvis længden af variablen "data" er lig 0 (tom)
    {
        alert("Udfyld venligst formularen"); // giv brugern besked om at udfylde formularen
    } else {
        data = data.substring(0, data.length - "<br>".length); // fjern det sidste linieskift

        // hvis url er lig "", virker ikke i Opera. Hvis url er lig "about:blank", virker det ikke i FireFox:
        url = (navigator.userAgent.toLowerCase().indexOf("opera") > -1)?"about:blank":"";

        w = window.open(url,'w',''); // åben et nyt vindue med adressen ("about:blank" eller "")
        w.document.body.innerHTML = data; // put data-værdierne i det nye vindue
        w.print(); // print det nye vindue
    }
    return false;
}

//-->
</script>
Avatar billede thesurfer Nybegynder
18. august 2006 - 13:07 #8
Ahh.. på den måde :-)
Avatar billede thesurfer Nybegynder
18. august 2006 - 13:16 #9
Det nemmeste er måske at smide værdierne i en skjult form (via ASP), og derefter submitte den til et nyt vindue, der kun har til formål at udskrive værdierne.

Der skal du over i ASP kategorien.. så du "flytter" bare spørgsmålet til ASP kategorien.


Ved flyt af spørgsmål:
Husk at MARKERE dit navn i boksen til venstre, og klikke på ACCEPTER-knappen, efter at du har lagt et SVAR.
Derefter opretter du spørgsmålet, i den rette kategori. Derefter lægger du et link til det nye spørgsmål, i dette spørgsmål



Eksempel på det nye spørgsmål:

Titel: Printe værdier hentet via request.form, og kun værdierne
Tekst:
Jeg modtager værdier via request.form, og og antallet af værdier, samt hvilke værdier, er ukendt.
Når værdierne modtages, vises en bekræftelsesside.

Fra bekræftelsessiden skal man kunne klikke på en knap/link, og få et nyt vindue frem, der kun indeholder værdierne, og ikke andre elementer.

Det nye vindue skal så selv aktivere print-funktionen via JavaScript.

Jeg har følgende JavaScript kode tilrådighed:

<script language="JavaScript" type="text/javascript">
<!--
function makePrintout() {
if (window.print) { /* Avoids errors */
window.print();
}
}

//-->
</script>
Avatar billede thesurfer Nybegynder
18. august 2006 - 13:19 #10
Du kunne evt printe alle felterne ud, også selv om felterne er tomme..

F.eks.
Navn: Hans Hansen
Adresse:
Telefon: 12345678

Som du kan se, er "Adresse"-feltet tomt.
Avatar billede Slettet bruger
18. august 2006 - 13:21 #11
God ide, det er hermed gjort
http://www.eksperten.dk/spm/726952

Jeg synes alligevel du skal have point, som tak for hjælpen, jeg kunne bare have forklaret mig bedre
Avatar billede thesurfer Nybegynder
18. august 2006 - 13:21 #12
OK :-)
Avatar billede thesurfer Nybegynder
18. august 2006 - 13:22 #13
Takker for points :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester