Avatar billede mrfunder Nybegynder
14. oktober 2004 - 22:25 Der er 15 kommentarer

Hjælp til elseif i javascript

Hej!
Jeg har et rykkesystem hvor man rykker med ens figur. Hvis feltet er tomt kan man rykke hen i det.. Det virker altsammen fint nok. Men mit problem er ved min elseif hvor der skal ske en funktion hvis man HØJREKLIKKER i feltet og der er en person i det.. Altså feltet er fyldt.. ikke tomt. I kan selv se hvad jeg har lavet.. Men får følgende fejl i det: "Et objekt var ventet"




function move(felt) {
if(event.button==1 && users[felt]=="" && oldfelt!=felt) {
if(document.all['itemsbox'].style.visibility=="visible") {
document.all['itemsbox'].style.visibility='hidden';
}
document.all['you'].style.left =
document.all['felt'+felt].style.left;
document.all['you'].style.top =
document.all['felt'+felt].style.top;
document.all['you'].style.zIndex = felt;
oldfelt=felt;
ext = "";
if(items[felt]) {
x = document.all['felt'+felt].style.left.replace("px","");
document.all['itemsbox'].style.left = eval(x-10);
document.all['itemsbox'].style.top =
document.all['felt'+felt].style.top;
document.all['itemsboxtitle'].innerHTML = 'Ting';
document.all['itemsboxtekst'].innerHTML = '';
document.all['itemsbox'].style.visibility='visible';
ext = "&item=true";
}
myaction.location ='action.php?action=move&felt='+felt+ext;
}
elseif(users[felt] !== "" && event.button==2) {
alert('Det virker');
}
}
}
Avatar billede roenving Novice
14. oktober 2004 - 22:28 #1
Du mangler et mellemrum, for der findes ikke en elseif i javascript, så:

else if(users[felt] !== "" && event.button==2) {
Avatar billede roenving Novice
14. oktober 2004 - 22:35 #2
Desuden må det jo anses for en forfejlet politik at kræve, at dine brugere kun må benytte M$IE eller Opera, når du lige kan lave en minimal ændring og få det til at fungere i alle browsere:

function move(felt) {
  if(event.button==1 && users[felt]=="" && oldfelt!=felt) {
    if(document.getElementById('itemsbox').style.visibility=="visible") {
      document.getElementById('itemsbox').style.visibility='hidden';
    }
    document.getElementById('you').style.left = document.getElementById('felt').style.left;
    document.getElementById('you').style.top = document.getElementById('felt'+felt).style.top;
    document.getElementById('you').style.zIndex = felt;
    oldfelt=felt;
    ext = "";
    if(items[felt]) {
      x = parseInt(document.getElementById('felt'+felt).style.left);
      document.getElementById('itemsbox').style.left = x-10+'px';
      document.getElementById('itemsbox').style.top = document.getElementById('felt'+felt).style.top;
      document.getElementById('itemsboxtitle').innerHTML = 'Ting';
      document.getElementById('itemsboxtekst').innerHTML = '';
      document.getElementById('itemsbox').style.visibility='visible';
      ext = "&item=true";
    }
    window.frames['myaction'].location ='action.php?action=move&felt='+felt+ext;
  }else if(users[felt] !== "" && event.button==2) {
    alert('Det virker');
  }
}
}
Avatar billede mrfunder Nybegynder
14. oktober 2004 - 22:48 #3
Roenving > Den nye "optimerede" kode virker slet ikke. Så kan man ikke rykke, og det er heller ikke noget jeg pt. vil ændre på lige nu. Nu skal det bare virke i IE.

function move(felt) {
if(event.button==1 && users[felt]=="" && oldfelt!=felt) {
if(document.all['itemsbox'].style.visibility=="visible") {
document.all['itemsbox'].style.visibility='hidden';
}
document.all['you'].style.left =
document.all['felt'+felt].style.left;
document.all['you'].style.top =
document.all['felt'+felt].style.top;
document.all['you'].style.zIndex = felt;
oldfelt=felt;
ext = "";
if(items[felt]) {
x = document.all['felt'+felt].style.left.replace("px","");
document.all['itemsbox'].style.left = eval(x-10);
document.all['itemsbox'].style.top =
document.all['felt'+felt].style.top;
document.all['itemsboxtitle'].innerHTML = 'Ting';
document.all['itemsboxtekst'].innerHTML = '';
document.all['itemsbox'].style.visibility='visible';
ext = "&item=true";
}
myaction.location ='action.php?action=move&felt='+felt+ext;
}
else if(users[felt] !== "" && event.button==2) {
alert('Det virker');
}
}
}

Det virker stadig ikke -
Hvis jeg fjerner:
}
else if(users[felt] !== "" && event.button==2) {
alert('Det virker');
}

Så virker det?
Så det er vel der fejlen er?
Avatar billede roenving Novice
14. oktober 2004 - 22:51 #4
Måske skal du ikke bruge præcis forskellig fra ...

else if(users[felt] != "" && event.button==2) {
Avatar billede mrfunder Nybegynder
14. oktober 2004 - 23:04 #5
Det virker desværre stadig ikke...

Hvis jeg bryder op med det og indskifter med en else istedet.. Så giver det dog ingen fejl:

function move(felt) {
if(event.button==1 && users[felt]=="" && oldfelt!=felt) {
if(document.all['itemsbox'].style.visibility=="visible") {
document.all['itemsbox'].style.visibility='hidden';
}
document.all['you'].style.left =
document.all['felt'+felt].style.left;
document.all['you'].style.top =
document.all['felt'+felt].style.top;
document.all['you'].style.zIndex = felt;
oldfelt=felt;
ext = "";
if(items[felt]) {
x = document.all['felt'+felt].style.left.replace("px","");
document.all['itemsbox'].style.left = eval(x-10);
document.all['itemsbox'].style.top =
document.all['felt'+felt].style.top;
document.all['itemsboxtitle'].innerHTML = 'Ting';
document.all['itemsboxtekst'].innerHTML = '';
document.all['itemsbox'].style.visibility='visible';
ext = "&item=true";
}
myaction.location ='action.php?action=move&felt='+felt+ext;
} else {
alert('Det virker');
}
}


Men mit problem er at så kan jeg ikke tjekke om det er en user eller et tomt felt der blvier klikket på, og om det bliver gjort med højreklik
Avatar billede mrfunder Nybegynder
14. oktober 2004 - 23:12 #6
Sig ikke at du er tom for idé'er.. Det er jeg nemlig - need help :)
Avatar billede roenving Novice
14. oktober 2004 - 23:14 #7
Hvad hedder fejlen du får ?-)

-- jeg har haft en mistanke til users[felt] et stykke tid ...
Avatar billede mrfunder Nybegynder
14. oktober 2004 - 23:19 #8
Et objekt var ventet.. Stadig den samme fejl :(
Avatar billede roenving Novice
14. oktober 2004 - 23:21 #9
Hvorfra har du users-arrayet ?-)
Avatar billede mrfunder Nybegynder
14. oktober 2004 - 23:23 #10
En function lidt længere oppe på siden hvor chatterne bliver lavet..
Avatar billede roenving Novice
14. oktober 2004 - 23:35 #11
Defineres users inde i funktionen, for så vil den sandsyligvis være en lokal variabel ...

Prøv at placere en linje udenfor alle funktioner:

var users = new Array();
Avatar billede mrfunder Nybegynder
14. oktober 2004 - 23:45 #12
Jeg har allerede puttet users i et array. Har prøvet at putte <?=users[felt]?> i en phpfunktion der inde.. Og så giver dne problemer igen.. Fjerner jeg mine phptegn opfører den sig som den skal.. Så tror mit problem ligger i: users[felt]

Hvordan vil du have at jeg skal definere users inde i funktionen?
Avatar billede roenving Novice
14. oktober 2004 - 23:54 #13
Hvis du definerer en variabel inde i en funtion, vil den være lokal og ikke leve uden for funktionen, du kan f.eks. se på dette:

<script type="text/javascript">
var txt = "En global variabel";
var txt2 = "En global variabel - 2";
function visTxt(){
  var txt = "En lokal variabel";
  var txt3 = "En lokal variabel - 3";
  alert(txt);
  alert(txt2);
}
alert(txt);
//alert(txt3);
window.onload = visTxt;
</script>

-- hvis du fjerner udkommenteringen af den sidste alert vil du få en fejl, fordi der ikke findes en variabel udenfor funktionen, som hedder txt3 ...
Avatar billede mrfunder Nybegynder
14. oktober 2004 - 23:58 #14
Jeg vil prøve og droppe det her og lave det på en anden måde.
Kan jeg lave sådan at når jeg høreklikker bliver der en funktion ved navn rightclick kørt?
Avatar billede jonashn Nybegynder
15. oktober 2004 - 20:09 #15
function click(e) {
if(event.button==2||event.button==3) {
rightclick()
}
window.onclick=click;
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