Avatar billede horizon Nybegynder
19. november 2005 - 20:22 Der er 3 kommentarer og
1 løsning

Variabler på tværs af vinduer

Jeg har fundet et fikst lille script på nettet som viser en farveoversigt som mine medlemmer gerne skulle kunne bruge for at ændre baggrundsfarven på en side.

Problemet er at jeg har været nødsaget til at smide denne funktion ind i et nyt vindue, og det felt som brugeren skal skrive koden i er i "_parent" vinduet, så er problemet, hvordan får jeg variablen som bliver skabt smidt over i feltet i det andet vindue?

Scriptet ser sådanher ud:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>
    <head>
        <meta http-equiv="content-type" content="text/html;charset=iso-8859-1">
        <title><?php echo $_SESSION['TitelTekst']; ?></title>
        <style type="text/css" media="screen"><!--
table { margin: 0 }
body { color: black; margin: 0; padding: 0 }
h4 { font-size: 17px; font-family: "Eras Bold ITC"; font-weight: bold; margin: 0 }
input { color: #000; font-size: 12px; font-family: "Eras light ITC"; background-color: #ffb400; background-image: url(http://www.thesimcity.dk/Billeder/Input_Bg.jpg); cursor: url('http://www.thesimcity.dk/Billeder/Markoerer/Int_Link.cur'); margin: 0; padding: 0; border-style: solid; border-width: 1px; border-color: #000 #3b3b3b #757575; outline: solid 1px #000; scrollbar-3dlight-color: #000000; scrollbar-arrow-color: #000000; scrollbar-base-color: #FFb400; scrollbar-darkshadow-color: #000000; scrollbar-face-color: #FFb400; scrollbar-highlight-color: #000000; scrollbar-shadow-color: #000000; scrollbar-track-color: #FFb400

    }
--></style>
    </head>
   
   
<body bgcolor="#ffb400">
        <table width="100%" border="1" cellspacing="0" cellpadding="0" bordercolor="#000000" height="200">
            <tr height="30">
                <td valign="top" height="30" background="../../../Billeder/Forum/Forum-Overskrift.jpg">
                    <h4>Farvev&aelig;lger</h4>
                </td>
            </tr>
            <tr height="30">
                <td bgcolor="#ffb400" height="30">Flyt Mark&oslash;ren over farverne mens du holder museknappen nede.</td>
            </tr>
            <tr>
                <td valign="top">
                    <script language="JavaScript1.2">
var isNav = (navigator.appName.indexOf("Netscape") !=-1);
var color
var temp
var red=0;
var green=0;
var blue=0;
function click(e)
{ clr=new Array('00','11','22','33','44','55','66','77','88','99','aa','bb','cc','dd','ee','ff');
Xmd = (isNav) ? e.pageX : event.clientX
Ymd = (isNav) ? e.pageY : event.clientY
if(Xmd>100 && Xmd<388 && Ymd>100 && Ymd<120 )
{
  temp=(eval(Xmd)-100)/3+1
  temp=Math.round(temp)
  if(temp>-1 && temp<16)
  {
  green=temp;
  blue=0;
  red=15;
  }
  if(temp>15 && temp<33)
  {
  green=15;
  blue=0;
  red=15-temp+15;
  }
  if(temp>32 && temp<49)
  {
  green=15;
  blue=temp-32;
  red=0;
  }
  if(temp>48 && temp<64)
  {
  green=15-temp+48;
  blue=15;
  red=0;
  }
  if(temp>63 && temp<81)
  {
  green=0;
  blue=15;
  red=temp-64;
  }
  if(temp>80 && temp<96)
  {
  green=0;
  blue=15-temp+80;
  red=15;
  }

color="#"+clr[red]+clr[green]+clr[blue];
document.changer.ALLHEX.value=clr[red]+clr[green]+clr[blue];
}

if(Xmd>100 && Xmd<229 && Ymd>122 && Ymd<142 )
{
  temp=(eval(Xmd)-100)/8-1
  temp=Math.round(temp)
  temp=15-temp
color="#"+clr[temp]+clr[temp]+clr[temp];
document.changer.ALLHEX.value=clr[temp]+clr[temp]+clr[temp];
}
  document.bgColor=color; 
}

function begin(){
if (event.button==1)
click()
return true
}

document.onmousemove = begin;
document.onclick=begin
</script>
                    <style>
table.p1{position:absolute;top:100px;left:100px}
table.p2{position:absolute;top:120px;left:100px}
</style>
                    <script language="JavaScript">
clr=new Array('00','11','22','33','44','55','66','77','88','99','aa','bb','cc','dd','ee','ff');
document.write("<table border=0 cellpadding=0 cellspacing=0 class=p1>");
document.write("<tr height=20>");
var red=15;
var green=0;
var blue=0;
for (green=0;green<16;green++) {
document.write('<td width=3  bgcolor="#'+clr[red]+clr[green]+clr[blue]+'"></td>');
}
green=15;
blue=0;
red=15;
for (red=15;red>-1;red--) {
document.write('<td width=3  bgcolor="#'+clr[red]+clr[green]+clr[blue]+'"></td>');
}
green=15;
blue=0;
red=0;
for (blue=0;blue<16;blue++) {
document.write('<td width=3  bgcolor="#'+clr[red]+clr[green]+clr[blue]+'"></td>');
}

green=15;
blue=15;
red=0;
for (green=15;green>-1;green--) {
document.write('<td width=3  bgcolor="#'+clr[red]+clr[green]+clr[blue]+'"></td>');
}
green=0;
blue=15;
red=0;
for (red=0;red<16;red++) {
document.write('<td width=3  bgcolor="#'+clr[red]+clr[green]+clr[blue]+'"></td>');
}
green=0;
blue=15;
red=15;
for (blue=15;blue>-1;blue--) {
document.write('<td width=3  bgcolor="#'+clr[red]+clr[green]+clr[blue]+'"></td>');
}
document.write("</tr>");
document.write("</table>");


document.write("<table border=0 cellpadding=0 cellspacing=0 class=p2>");
document.write("<tr height=20>");
for (i=15;i>-1;i--) {
document.write('<td width=8  bgcolor="#'+clr[i]+clr[i]+clr[i]+'"></td>');
}
document.write("</tr>");


document.write("</table>");
</script>
                </td>
            </tr>
            <tr height="30">
                <td bgcolor="#ffb400" height="30">
                    <form name=changer>
                        <input type="text" name="ALLHEX" size="6" maxlength="6">                    </form>
                </td>
            </tr>
        </table>
    </body>
</html>

Da mit kendskab til Javascript er rimelig begrænset har jeg ikke selv kunnet hitte ud af det, men har dog fundet ud af at det højst sansynligt er noget I disse linjer som skal tilføjes et eller andet smart noget :P

* * *

color="#"+clr[red]+clr[green]+clr[blue];
document.changer.ALLHEX.value=clr[red]+clr[green]+clr[blue];
->> Her evt? <<-
}

if(Xmd>100 && Xmd<229 && Ymd>122 && Ymd<142 )
{
  temp=(eval(Xmd)-100)/8-1
  temp=Math.round(temp)
  temp=15-temp
color="#"+clr[temp]+clr[temp]+clr[temp];
document.changer.ALLHEX.value=clr[temp]+clr[temp]+clr[temp];
->> Her evt? <<-

* * *

Formen som variablen skal smides ind i hedder postmodify og feltet hedder BGFarve

Håber nogen er villig til at hjælpe her ;)
Avatar billede psykochicken Nybegynder
20. november 2005 - 02:31 #1
...jeg forstår dig sådan at du åbner din "farvevælger" i et popupvindue.
Hvis det er tilfældet, er det "opener" (window.opener = den side, der åbnede popupen) du skal have fat i.

prøv at erstatte dine ->>Her evt?<<- med:
window.opener.document.forms['postmodify'].BGfarve.value = document.forms['changer'].ALLHEX.value;

og hvis du vil skifte baggrundsfarven på opener-siden med det samme: window.opener.document.body.style.backgroundColor=color; 

Husk at få url´en med i doctype:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
og prøv at køre din kode gennem en validator: http://validator.w3.org/

...og så bør du vel også fortælle dine medlemmer at farvevælgeren kun virker i IE ;o)

/psc
Avatar billede horizon Nybegynder
20. november 2005 - 17:49 #2
Efter jeg har smidt den linje ind de to steder så skifter baggrundsfarven først farve når man holder musen nede over en farve og kører musen væk fra farveoversigten" (altså væk fra scriptet og ud på baggrunden), og den opdaterer ikke feltet "BGFarve" i opener vinduet, men er det fordi den funktion som åbner vinduet er i en fil for sig (fin funktion i adobe golive)?
Avatar billede psykochicken Nybegynder
20. november 2005 - 18:34 #3
>>"er det fordi den funktion som åbner vinduet er i en fil for sig"  - nej det burde ikke umiddelbart betyde noget.

Ex: hvis dit script indeholder:
    .......osv.....
    color="#"+clr[red]+clr[green]+clr[blue];
    document.forms['changer'].ALLHEX.value=clr[red]+clr[green]+clr[blue];
    window.opener.document.forms['postmodify'].BGfarve.value = document.forms['changer'].ALLHEX.value;
  }

  if(Xmd>100 && Xmd<229 && Ymd>122 && Ymd<142 ){
    temp=(eval(Xmd)-100)/8-1
    temp=Math.round(temp)
    temp=15-temp
    color="#"+clr[temp]+clr[temp]+clr[temp];
    document.forms['changer'].ALLHEX.value=clr[temp]+clr[temp]+clr[temp];
    window.opener.document.forms['postmodify'].BGfarve.value = document.forms['changer'].ALLHEX.value;
  }
  document.body.style.backgroundColor=color; 
  window.opener.document.body.style.backgroundColor=color; 
}

function begin(){
  if(event.button == 1)
    click();
    return true;
}

document.onmousedown = begin; //...onclick er ændret til onmousedown..
document.onmousemove = begin;
</script>

og din opener side indeholder noget ala:
<form name="postmodify" action="">
  <input type="button" value="vælg farve" onclick="window.open('farve.htm','win','width=400,height=300');">
  <br>
  Baggrundsfarve:<input type="text" name="BGfarve" size="20">
</form>

vil det virke i IE (men stadigvæk kun der).

/psc
Avatar billede horizon Nybegynder
02. april 2006 - 16:42 #4
har forkastet idéen, fandt på noget andet der var nemmere, en tabel med farver og så koden brugeren skulle skrive, ikke en optimal løsning, men det virker da.
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