Avaleht
uus teema   vasta Tarkvara »  Programmeerimine »  Veateated JavaScript märgi kõik teemad loetuks
märgi mitteloetuks
vaata eelmist teemat :: vaata järgmist teemat
Hinnavaatlus :: Foorum :: Uudised :: Ärifoorumid :: HV F1 ennustusvõistlus :: Pangalink :: Telekavad :: HV toote otsing
autor
sõnum Saada viide sõbrale. Teata moderaatorile
otsing:  
andrusny
Kreisi kasutaja
andrusny

liitunud: 20.03.2006




sõnum 11.04.2010 22:51:49 Veateated JavaScript vasta tsitaadiga

Debugisin 1stJavaScript Editoris üht JS tehtud koodi, kood iseenesest töötab ja eelnevalt pole saanud ühtegi veateadet teistelt editoridelt. Nüüd annab reale
lingid = document.body.getElementsByTagName('a');

teateks Incompatible types tähendaks nagu sobimatu tüüp vms.
Oskab keegi öelda milles on viga?

_________________
Kommentaarid: 7 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 7
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
Redikate
HV veteran
Redikate

liitunud: 30.12.2005




sõnum 12.04.2010 19:26:22 vasta tsitaadiga

Kas viga mitte ei või tulla sellest, et muutuja "lingid" pole määratud sul vastavaks tüübiks milleks siis antud juhul oleks minu arusaamist mööda massiiv.

Kahjuks ei tunne eriti javascripti, kuid äkki midagi sellist:
var lingid = new Array();
lingid = document.body.getElementsByTagName('a');

// ja esimesele lingile pääseb ligi nii
document.write(lingid[0]);

// ja teisele nii jne....
document.write(lingid[1]);


Võimalik, et Sind võib päästa ka lihtne "var"

var lingid = document.body.getElementsByTagName('a');

_________________
http://nodejs.org/
"I'm also a person. Programming is just one thing I do."
Kommentaarid: 34 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 33
tagasi üles
vaata kasutaja infot saada privaatsõnum
andrusny
Kreisi kasutaja
andrusny

liitunud: 20.03.2006




sõnum 12.04.2010 20:26:17 vasta tsitaadiga

Kahjuks on kõik need variandid juba proovitud ja veateade jääb samaks.
Üldjuhul tekib see uus array ka niisama, ilma, et seda peaks eelnevalt deklareerima.

Väga võimalik, et tegu on ka lihtsalt selle editori bugiga (vähetõenäoline), kuna üheski teises pole mingit teadet ilmnenud. Täiesti jkuhuslikult sai see kood sinna visatud ja veateade avastatud. Kood iseenesest toimib.

_________________
Kommentaarid: 7 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 7
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
nene
Kreisi kasutaja
nene

liitunud: 20.03.2004




sõnum 19.04.2010 20:28:24 vasta tsitaadiga

Antud koodilõigul JavaScripti seisukohast midagi viga pole. Arvatavasti tuleneb editori veateade siiski kontekstist - see koodirida ei eksisteeri sul ju uhkel üksinduses. Kui sa näitaksid näiteks kogu funktsiooni vms, mille sees see koodirida esineb, siis ehk oskaks midagi täpsemalt öelda.

Ainus, mida ma oskan hetkel oletada on see, et muutujat lingid kasutatakse eelnevas koodis ka mingil muul otstarbel. Näiteks omistatakse talle mingit muud tüüpi väärtus kui NodeList, mille getElementsByTagName() tagastab. JavaScripti jaoks pole vahet, mitut erinevat tüüpi väärtusi sa muutujale omistad, aga peetakse heaks praktikaks (ja mitte ainult JavaScriptis) üht muutujat erinevate asjade jaoks mitte taaskasutada.

_________________
Mõistus otsas? Pane pinusse...
Kommentaarid: 24 loe/lisa Kasutajad arvavad:  :: 0 :: 1 :: 23
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
andrusny
Kreisi kasutaja
andrusny

liitunud: 20.03.2006




sõnum 19.04.2010 21:28:06 vasta tsitaadiga

Panen siis kogu koodi, mida katsetasin. Eesmärk siis kaotada need lingid, mille sees on etteantud string. Eesmärgi täidab.

<a href="http://www.neti.ee/cgi-bin/teema/RIIK_JA_YHISKOND/Regioonid/">1</a><br>
<a href="http://www.muffimaania.pri.ee/cgi-bin/teema/RIIK_JA_YHISKOND/Regioonid/">2</a><br>
<a href="www.ordi.pri.ee">3Muffimaania</a><br>
<a href="http://www.neti.ee/RIIK_JA_YHISKOND/Regioonid/">4</a><br>
<a href="http://www.neti.ee/RIIK_JA_YHISKOND/Regioonid/">5</a><br>
<a href="http://www.google.com/RIIK_JA_YHISKOND/Regioonid/">Google</a><br>

<a href="http://www.neti.ee/RIIK_JA_YHISKOND/Regioonid/">7</a><br>

<script>
var keelatud = new Array("www.neti.ee", "muffimaania");
var lingid = document.getElementsByTagName('a');
for(i=0;i<lingid.length;i++){
         var href = lingid[i].href;
            for(ii=0;ii<keelatud.length;ii++){
            if(href.lastIndexOf(keelatud[ii])!=-1){lingid[i].style.display = "none";}
                                                                        }
                                                      }
                                                       
                                           
</script>

_________________
Kommentaarid: 7 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 7
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
nene
Kreisi kasutaja
nene

liitunud: 20.03.2004




sõnum 20.04.2010 14:30:54 vasta tsitaadiga

Jah, ka siin ei paista midagi, mis toda veateadet tingiks. Kuid toon välja mõningased muud puudused:

javascript:
  1. // new Array() asemel soovitan kasutada []
  2. var keelatud = ["www.neti.ee", "muffimaania"];
  3. var lingid = document.getElementsByTagName('a');
  4. // i eest puudu var, ilma selleta luuakse globaalne muutuja
  5. for (var i=0; i<lingid.length; i++) {
  6.   var href = lingid[i].href;
  7.   // for tsüklites on kombeks kasutada muutujaid i, j, k, ...
  8.   // see muidugi rohkem maitse asi, ammune Fortranist pärit traditsioon
  9.   for (var j=0; j<keelatud.length; j++) {
  10.     // Miks lastIndexOf()? lihtsalt indexOf() peaks piisama
  11.     // ning võrdlusteks soovitan rangemaid !== ja === operaatoreid
  12.     if (href.indexOf(keelatud[j]) !== -1) {
  13.       lingid[i].style.display = "none";
  14.     }
  15.   }
  16. }

_________________
Mõistus otsas? Pane pinusse...
Kommentaarid: 24 loe/lisa Kasutajad arvavad:  :: 0 :: 1 :: 23
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
andrusny
Kreisi kasutaja
andrusny

liitunud: 20.03.2006




sõnum 20.04.2010 17:34:55 vasta tsitaadiga

// new Array() asemel soovitan kasutada []


Kas see teeb koodi kuidagi kiiremaks? Mis mõte on? Lihtsalt lühem kirjaviis?

_________________
Kommentaarid: 7 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 7
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
nene
Kreisi kasutaja
nene

liitunud: 20.03.2004




sõnum 20.04.2010 20:27:13 vasta tsitaadiga

Peamiselt on see lühem ja mugavam kirjutada, aga new Array() kasutamine katkeb endas ka väikest veaohtu.

Näiteks järgmised kaks koodirida teevad täpselt ühte ja sama (loovad massiivi elementidega 1, 2, 3):

var a = new Array(1, 2, 3);
var b = [1, 2, 3];


Kuid järgnevad väga sarnased koodiread teevad hoopis erinevaid asju:

var a = new Array(3);
var b = [3];


Muutuja a väärtuseks saab nüüd hoopis tühi massiiv pikkusega 3.

Isiklikust JavaScripti kirjutamise kogemusest võin aga öelda, et mitte kunagi pole tarvis läinud massiivi suurust sedasi ette defineerida.

_________________
Mõistus otsas? Pane pinusse...
Kommentaarid: 24 loe/lisa Kasutajad arvavad:  :: 0 :: 1 :: 23
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
näita postitusi alates eelmisest:   
uus teema   vasta Tarkvara »  Programmeerimine »  Veateated JavaScript
[vaata eelmist teemat] [vaata järgmist teemat]
 lisa lemmikuks
näita foorumit:  
 ignoreeri teemat 
sa ei või postitada uusi teemasid siia foorumisse
sa ei või vastata selle foorumi teemadele
sa ei või muuta oma postitusi selles foorumis
sa ei või kustutada oma postitusi selles foorumis
sa ei või vastata küsitlustele selles foorumis
sa ei saa lisada manuseid selles foorumis
sa võid manuseid alla laadida selles foorumis



Hinnavaatlus ei vastuta foorumis tehtud postituste eest.