Toon posts:

[javascript] onafterprint + self.close()

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik wil de popup waaruit geprint wordt sluiten zodra er op afdrukken is geklikt.
Ik heb op wel wat gevonden, maar dat werkte helaas niet.

Waar ik het ook neerzet, als ik op printen druk opent hij het bevestigings schermpje waarin je je printer kan kiezen ed, maar daarna sluit hij het window niet?

Ik heb vele variaties geprobeert, een ervan is deze
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<script language="JavaScript1.2">

    function removeTD(){
        var hide_all=document.all.td_tohide;
        hide_all.style.display='none';
    }
    
    function revertback(){
        var hide_all=document.all.td_tohide;
        hide_all.style.display='block';
        this.window.close();
        self.close();
    }
    
    window.onbeforeprint=removeTD;
    window.onafterprint=revertback;
</script>


ook zoals in het voorbeeld stond de onafterprint in de body plaatsen wilde niet helpen.
Kan het niet wat ik wil, of maak ik een fout?

Ik heb hier IE 5.5 overigens, daar kan het ook niet aan liggen

[ Voor 7% gewijzigd door Verwijderd op 04-06-2003 14:34 ]


  • djazete
  • Registratie: Juli 1999
  • Laatst online: 07-02-2020

djazete

steel

ik heb een popup ergens gebruikt, en die roept dus een html aan waar in de body onload="print(); en close();" staat.
dat werkt bij mij... mar misschien is dat niet wat je bedoelt...

Verwijderd

Topicstarter
ik heb in de popup zelf nog een aantal opties staan die aan of uit gevinkt kunnen worden, er wordt pas geprint als er op de print knop wordt gedrukt.
In de onBeforePrint zet ik alle overbodige velden op invisible en vervolgens drukt hij de pagina af. In de handler van de printknop in asp.net herlaad ik de parent via javascript.
als deze acties zijn uitgevoerd wil ik het venster automatisch sluiten, een onafterprint leek mij hier perfect voor....

de afterprint zoals hij hierboven staat werkt voor het weer visible maken van de "overbodige" velden, maar hij wil zichzelf niet sluiten...

Verwijderd

Topicstarter
*schopje* :D

  • djazete
  • Registratie: Juli 1999
  • Laatst online: 07-02-2020

djazete

steel

als je nou een fucntie maakt die hij aan roept na het op print drukken via een link, waarin staat functio doPrint { print(); doClose(); } ofzoiets, dan voert ie het toch na elkaar uit..?
En als printen klaar is, of gecancelled krijgt ie een true terug (of een false) en gaat ie verder. Lijkt mij. maar ik been geen javascript man

Verwijderd

Topicstarter
ik heb zoiets geprobeert, maar de print() functie opent een popup met daarin de de verschillende printers & opmaak keuzes enzo

als je direct een close doet, dan knalt hij de popup dicht, voordat er echt geprint is.

daarom moet het volgens mij echt via de onafterprint, maar ik ben ook geen JS guru :'(

Verwijderd

Topicstarter
ik kreeg zojuist een heldere ingeving, niet heel fraai maar het werkt wel :)
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
function revertback(){
    //store all elements with id=remove to "remove_el"
    var hide_all=document.all.td_tohide;
    //if there is only one element with id=remove
    if (hide_all!=''&&hide_all.length==null)
    hide_all.style.display='none'
    else{
    //for each element with id=remove
    for (i=0;i<hide_all.length;i++)
        hide_all[i].style.display='block'
    }
    
    var nocolor=document.all.nocolor;
    if (nocolor!=''&&nocolor.length==null)
    nocolor.style.backgroundColor='#D2EEFF'
    else{
    for (i=0;i<nocolor.length;i++)
        nocolor[i].style.backgroundColor='#D2EEFF'
    }
    
    document.location.href("closewindow.aspx")
}


closewindow.aspx
code:
1
2
3
4
<html>
<body onload="window.close()">
</body>
</html>


sneaky but effective :)

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:02

crisp

Devver

Pixelated


ja, je herlaadt de pagina waardoor hij natuurlijk nooit bij de onafterprint toekomt.
Een nettere oplossing om bepaalde elementen niet te printen is trouwens het gebruik van een aparte stylesheet voor print media, dan heb je daar geen javascript voor nodig.
Verder zou ik je willen aanraden af te stappen van het gebruik van document.all en DOM te gebruiken opdat het ook werkt in niet-IE browsers.
In je <script> tag geef je alleen een language propery op, zet daar ook een type="text/javascript" bij. Verder zou ik javascript1.2 niet gebruiken als language property aangezien NS daar anders mee omgaat dan IE (maar dan praat je over hele oude versies), gebruik liever javascript1.3 (IE4+ en NS4+) of gewoon generiek language="javascript", tenzij je echt specifieke javascript1.5 dingen gaat doen (IE5+ NS6+) is dat tegenwoordig voldoende :)

Intentionally left blank


Verwijderd

Topicstarter
je herlaadt de pagina waardoor hij natuurlijk nooit bij de onafterprint toekomt.
Hij voorde de afterprint prima uit in de eerste versies (voor de doc.location) maar hij weigerde het venster te sluiten?
Een nettere oplossing om bepaalde elementen niet te printen is trouwens het gebruik van een aparte stylesheet voor print media, dan heb je daar geen javascript voor nodig.
kan je html elementen geheel uitzetten met een stylesheet?
zal daar nog eens naar kijken zo dan....

js tag aanpast :P

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:02

crisp

Devver

Pixelated

Verwijderd schreef op 06 June 2003 @ 10:18:
[...]

Hij voorde de afterprint prima uit in de eerste versies (voor de doc.location) maar hij weigerde het venster te sluiten?
doc.location? je bedoelt ws window.location.href = 'anderepagina.html'; ;)
kan je html elementen geheel uitzetten met een stylesheet?
zal daar nog eens naar kijken zo dan....

js tag aanpast :P
jep, gewoon:

Cascading Stylesheet:
1
2
3
4
5
6
7
8
9
<style type="text/css">

@media print  {

  .noprint { display: none; }

}

</style>


of een extern stylesheet for printen linken:

<link rel="stylesheet" type="text/css" media="print" href="print.css">

en dan aan je elementen die je niet wilt printen een class="noprint" hangen :)

Intentionally left blank


Verwijderd

Topicstarter
owkee geupdate :)
code:
1
2
3
4
5
6
7
<script language="JavaScript">
    function closewindow(){
        window.location.href("closewindow.aspx")
    }
    
    window.onafterprint=closewindow;
</script>


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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
style type="text/css">
    @media screen{
        body{
            scrollbar-arrow-color: #FFFFFF;
            scrollbar-base-color: #0169AB;
            scrollbar-dark-shadow-color: #0169AB;
            scrollbar-track-color: #0169AB;
            scrollbar-face-color: #0169AB;
            scrollbar-shadow-color: FFFFFF;
            scrollbar-highlight-color: FFFFFF;
            scrollbar-3d-light-color: #0169AB;
        }
        
        tr.blue{
            background-color: #D2EEFF;
        }
        
        tr.tohide{
            visibility : visible;
        }
        
        td.adres{
            font-family: arial;
            font-size: 12pt;
        }
        
        tr.nobreak{ 
            page-break-inside: avoid;
        }
        
        tr.newpage{
            page-break-before: always;
        }
    }
    
    @media print{
        body{
            font-family: arial;
            font-size: 12pt;
            color:#000000;
        }
        
        td.adres{
            font-family: arial;
            font-size: 12pt;
            color:#0169AB;
        }
        
        tr.blue{
            background-color: #FFFFFF;
        }
        
        tr.tohide{
            visibility : hidden;
        }
    }
</style>


en het werkt nog ook :P
maar volgens mij is onafterprint ook IE only? is daar nog een generieke methode voor?

PS: hoe maak je die kewle code blokken eigenlijk? :D

[ Voor 6% gewijzigd door Verwijderd op 06-06-2003 10:59 ]

Pagina: 1