webForumDet fria alternativet

try/catch-block?

6 svar · 551 visningar · startad av Travoni

TravoniMedlem sedan okt. 20041 538 inlägg
#1

Sitter try/catch-blocket "fel" eller finns det ett bättre sätt att göra på?

function containsDOM(a,b){
  var c=false;
  [B]try{[/B]
    do{
      if((c=a==b))break;
      b=b.parentNode
      }
      while(b!=null);
      return c
      }
  [B] catch(e){return c}[/B]
      };
TroxyMedlem sedan mars 20041 508 inlägg
#2

Skippa do. En try...catch i JavaScript ser bara ut såhär:

try {
   // Försök här
} catch (e) {
   // Fånga här
}
nitro2k01Medlem sedan aug. 20037 630 inlägg
#3

Troxy skrev:

Skippa do. En try...catch i JavaScript ser bara ut såhär:

Fast do har ju inget med try att göra där. do ser bara till att while-slingan får köra en första runda oavsett vad.
Även om koden är väldigt knasigt indenterad ser den korrekt ut i mina ögon. Dock ser jag inte meningen med try/catch här. Under vilka omständigheter uppstår det fel?

TroxyMedlem sedan mars 20041 508 inlägg
#4

nitro2k01 skrev:

Fast do har ju inget med try att göra där. do ser bara till att while-slingan får köra en första runda oavsett vad.

Aha så JavaScript har blivit välsignat med en do-sats? Det var en nyhet för mig. :e
Jag tolkade alltså Travonis kod helt fel... :r

TravoniMedlem sedan okt. 20041 538 inlägg
#5

Tack för svar.

Under vilka omständigheter uppstår det fel

Jo i FF så får jag :
uncaught exception: Permission denied to get property HTMLDivElement.parentNode
Så därav try/catch.
Jo, jag vet, indenteringen suger. Jag kan inte det i JS.

zcorpanMedlem sedan dec. 20042 269 inlägg
#6
function containsDOM(a, b) {
  var c = false;
  try {
    do {
      if ((c = a == b))
        break;
      b = b.parentNode;
    } while (b != null);
  } catch(e) {
  }
  return c;
}

Fast jag tror att du har ett annat problem om Firefox ger ett säkerhetsundantag. Försöker du inspektera en div i en iframe eller liknande?

TravoniMedlem sedan okt. 20041 538 inlägg
#7

Ok, nej det är en sådan här mouseover/out grej:

<html>
<head>
<title>onmouseenter/leave for IE4+, Netscape 6+, Opera 7</title>
<script type="text/javascript">

function containsDOM (container, containee) {
  var isParent = false;
  do {
    if ((isParent = container == containee))
      break;
    containee = containee.parentNode;
  }
  while (containee != null);
  return isParent;
}

function checkMouseEnter (element, evt) {
  if (element.contains && evt.fromElement) {
    return !element.contains(evt.fromElement);
  }
  else if (evt.relatedTarget) {
    return !containsDOM(element, evt.relatedTarget);
  }
}

function checkMouseLeave (element, evt) {
  if (element.contains && evt.toElement) {
    return !element.contains(evt.toElement);
  }
  else if (evt.relatedTarget) {
    return !containsDOM(element, evt.relatedTarget);
  }
}

</script>
</head>
<body>

<div style="border: 1px solid green;"
     onmouseover="if (checkMouseEnter(this, event)) {
                    window.status = event.type;
                  }"
     onmouseout="if (checkMouseLeave(this, event)) {
                   window.status = event.type;
                 }">
 Kibology for all.
 <br>
 <a href="http://www.kibo.com/">Visit GOD</a>
 <br>
 All for Kibology.
</div>

<hr>

<div style="border: 1px solid green;"
     onmouseout="if (checkMouseLeave(this, event)) {
                   this.style.visibility = 'hidden';
                 }">

 This div element with the green border gets hidden when the mouse 
leaves the div.

<div style="border: 1px solid blue;">
 Child div with blue border.
</div>
 Kibology for all.
</div>

<hr>

<div style="border: 1px solid green;"
     onmouseover="if (checkMouseEnter(this, event)) {
                    this.style.visibility = 'hidden';
                  }">

This div element with the green border gets hidden when the mouse enters
the div.
Genererad på 377 ms · cache AV · v20260730165559-full.f96bc7eb