Avatar billede sesam Nybegynder
12. juni 2003 - 19:10 Der er 21 kommentarer og
2 løsninger

target script

Nedenstående script bruger jeg til at tjekke hvor mange checkboxe der er valgt og som det fremgår må der max vælges 20. Det fungere fint.

Men nu vil jeg gerne vide om jeg kan bruge det i et frameset hvor udvælgelsen foregår i mainFrame og tælleren vises i topFrame...

Er det til at forstå?

<script language="JavaScript">
var counter = 0;
var max = 20;
function executeCheck( element ){
  if( element.checked ){
    if (counter >= max) {
      alert("Du må kun afkrydse 20 navne!");
      element.checked = false;
      return;
    }
    str = "Antal navne: " + (++counter);
  } else {
    str ="Antal navne: " + (--counter);
  }
  if(document.layers) {
      document.layers["count"].document.open();
      document.layers["count"].document.write(str);
      document.layers["count"].document.close();
  }
  else if(document.all) {
      document.all["count"].innerHTML = str;
  }
  else {
      document.getElementById("count").innerHTML = str;
  }
}
</script>
Avatar billede Slater Ekspert
12. juni 2003 - 19:14 #1
det vindue hvor tælleren er i skal bare refereres til som

window.parent.frames["framenavn"].document.layers["etellerandet"]
Avatar billede sesam Nybegynder
12. juni 2003 - 19:18 #2
hvor smider jeg det ind i min kode???
Avatar billede Slater Ekspert
12. juni 2003 - 19:21 #3
else if(document.all) {
      window.parent.frames["framenavn"].document.all["count"].innerHTML = str;
}

Sådan ser IE koden i hvert fald ud (du kan vel selv se hvor den skal ind)
Jeg har desværre ikke så meget forstand på Netscape koden, men går ud fra den skal se ca. sådan ud:

if(document.layers) {
      window.parent.frames["framenavn"].document.layers["count"].document.open();
      window.parent.frames["framenavn"].document.layers["count"].document.write(str);
      window.parent.frames["framenavn"].document.layers["count"].document.close();
  }
Avatar billede sesam Nybegynder
12. juni 2003 - 19:25 #4
Nu virker det.
Ved du noget om hvordan man gemmer værdien af count selvom der skiftes side altså mainFrame siden reloades?
Avatar billede Slater Ekspert
12. juni 2003 - 21:37 #5
Brug evt. din QueryString.

Når du skifter siden skriver du bare (i script):

location.href = "nyside.html?" + count;

husk &-tegnet.
Avatar billede Slater Ekspert
12. juni 2003 - 21:38 #6
jeg glemte så at sige at du kan få værdien igen på den nye side ved at skrive var str = location.search;
Avatar billede Slater Ekspert
12. juni 2003 - 21:38 #7
og en fejl - der skulle stå "husk ?-tegnet" og ikke "husk &-tegnet"

Undskyld... jeg roder rundt her :)
Avatar billede sesam Nybegynder
12. juni 2003 - 21:40 #8
Skal scriptet ligge i topframen eller mainframen?
Avatar billede sesam Nybegynder
12. juni 2003 - 21:41 #9
Hvor skal jeg sidde det ind: location.href = "nyside.html?" + count;

Undskyld hvis jeg spørger dumt...
Avatar billede Slater Ekspert
12. juni 2003 - 22:01 #10
hmm... om igen - du sagde hvis siden reloades, ikke hvis man skifter side...
så er der kun én ting at gøre... *tadaaa!* COOKIES :)

Husk dog at hvis en bruger har slået cookies fra på sin browser, vil det ikke virke. Det kan du teste for med navigator-collection'en.

Du får lige 2 funktioner jeg har skrevet... er rimelig sikker på de stadig virker selvom de er lidt gamle.



function setCookie(item, value) {
  if (!item)
      alert("setCookie error:\n\nNo item!");
  document.cookie = item + "=" + value + ";";
}

function getCookie(item) {
  if (!item)
      alert("getCookie error:\n\nNo item!");
  var start = document.cookie.indexOf(item + "=") + item.length + 1;
  if (start < 0)  // cookie was not found
      return "";
  var end = document.cookie.indexOf(";", start);
  if (end < 0)
      end = document.cookie.length;
  return document.cookie.substring(start, end);
}


Sæt disse to funktioner ind i dit dokument, og så kan du sætte og hente værdien.
F.eks. kan du nederst i din executeCheck-funktion skrive:

setCookie("count", count);

og så uden for funktionen (så det bliver udført før alt andet) skrive

var count = getCookie("count");
Avatar billede sesam Nybegynder
12. juni 2003 - 22:09 #11
Du skal nok få nogle flere point.
Vil du ikke skrive det ind i koden for mig?

Min checkbox ser sådan her ud: <input type="checkbox" name="name[]" value="anders" onClick="executeCheck(this);">

Jeg fatter ikke en brik af javascript...
Avatar billede Slater Ekspert
12. juni 2003 - 22:20 #12
okay


<script language="JavaScript">

// vi sætter lige counter til at være noget
var counter = getCookie("count");
// og lige være sikker på at den er et tal, for at undgå fejl
if isNaN(counter) counter = 0;


var max = 20;
function executeCheck( element ){
  if( element.checked ){
    if (counter >= max) {
      alert("Du må kun afkrydse 20 navne!");
      element.checked = false;
      return;
    }
    str = "Antal navne: " + (++counter);
  } else {
    str ="Antal navne: " + (--counter);
  }
  if(document.layers) {
      window.parent.frames["framenavn"].document.layers["count"].document.open();
      window.parent.frames["framenavn"].document.layers["count"].document.write(str);
      window.parent.frames["framenavn"].document.layers["count"].document.close();  }
  else if(document.all) {
      window.parent.frames["framenavn"].document.all["count"].innerHTML = str;
  }
  else {
      window.parent.frames["framenavn"].document.getElementById("count").innerHTML = str;

    setCookie("count", counter);
  }
}

function setCookie(item, value) {
  if (!item)
      alert("setCookie error:\n\nNo item!");
  document.cookie = item + "=" + value + ";";
}

function getCookie(item) {
  if (!item)
      alert("getCookie error:\n\nNo item!");
  var start = document.cookie.indexOf(item + "=") + item.length + 1;
  if (start < 0)  // cookie was not found
      return "";
  var end = document.cookie.indexOf(";", start);
  if (end < 0)
      end = document.cookie.length;
  return document.cookie.substring(start, end);
}


</script>


Jeg har ikke testet det, så sig til hvis det ikke virker...
Avatar billede sesam Nybegynder
12. juni 2003 - 22:22 #13
Nu virker det kan man skrive flere ting ned i cookien?
Avatar billede sesam Nybegynder
12. juni 2003 - 22:23 #14
altså så de navne der bliver valgt gemmes i cookien?
Avatar billede Slater Ekspert
12. juni 2003 - 22:27 #15
Jep, så mange du vil.
Avatar billede sesam Nybegynder
12. juni 2003 - 22:29 #16
Hvordan hvis du gider at hjælpe?
Avatar billede sesam Nybegynder
12. juni 2003 - 22:30 #17
Du får 200 point hvis du går op i det altså
Avatar billede Slater Ekspert
12. juni 2003 - 22:46 #18
Hvordan du skriver flere ting i cookien? Ekstremt simpelt

setCookie("value_1", 0);
setCookie("value_2", 109);

var getCookie("value_1"); // vil så være 0
var getCookie("value_2"); // og den vil være 109


Og sådan kan du proppe lige så mange ind du vil
Avatar billede sesam Nybegynder
12. juni 2003 - 23:04 #19
Hvordan sletter jeg cookien igen?
Avatar billede Slater Ekspert
12. juni 2003 - 23:06 #20
kan du kun ved at sætte dens værdi til ""
Avatar billede Slater Ekspert
12. juni 2003 - 23:08 #21
.. nårh, du mener HELE cookien? ikke kun en enkelt værdi..

Det kan man ikke... Men man kan sætte cookien's udløbsdato.

Jeg er dog løbet ind i nogle problemer med det på nyere versioner af IE, så jeg ved ikke helt... jeg tror bare man må indse at den bliver liggende til browseren finder på at slette den igen.
Avatar billede Slater Ekspert
14. juni 2003 - 23:03 #22
Hvad øhm... sker her noget? Har du fået det til at virke?
Avatar billede sesam Nybegynder
15. juni 2003 - 11:27 #23
Nej men du får 30 point for din hjælpsomhed. Har fundet en anden løsning...
Men ellers tusind tak for hjælpen...
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