ugrás a tartalomhoz

Szám azonosítóra nem működik a getElementById()?

gtoma · 2006. Dec. 22. (P), 15.27
Sziasztok. Igazából eddig nem volt nagy szükségem a JavaScript mélyreható ismereteire, azonban változott a helyzet. Akad is problémám elég. Azonban most van egy amivel már bíbelődök egy ideje, és se a neten se máshol nem találok megoldást. egy form list menüjét szeretném objektummá varázsolni. szeretném, ha bizonyos akciókra frissítené tartalmát, (prototype-t fogok használni). Természetesen külön fájlban fogom tárolni a js-t. az objektum létrehozásakor szeretném megadni, hogy mi a list ID-je. No el is kezdtem a terveimet leprogramozni, azonban képtelen vagyok elérni, két dolgot.


1. nem tudom, hogy az ID alapján hogyan fogon new options-t futtatni, mivel eddig a document.formname.mezoname.options[]-t használtam.

2. ha meg gebedek is az objektum meghívásakor kapott ID alapján valahogy nem tudja azonosítani a list menüt. Mintha üres lenne az ID-t megadó azonosító. Nem veszik el azonban, hisz az alert mezőben jó értéket ír ki.

Kutatom a netet egy idelye valami részletesebb getElementById() magyar leírása miatt, de nem találtam.

Ha esetleg tudnátok segíteni megköszönném.

Íme egy kódrészlet:

HTML FEJ
<script type="text/javascript" language="JavaScript">
proba = new CountryList('12');
</script>
HTML BODY
        <select name="12" size="10" id="12">
        </select>
JS fájl
function CountryList(ListsID)
	{
		this.CountryError = '';
		this.CountryFormID = IDCheck(ListsID);	
		this.CountryListElements = new Array();
		this.CountryCommand = "countryquery";
		this.CountryQuery = 'country';
		this.QueryMethod = 'get';
	}

function IDCheck(IDs)
	{
	var IDDd = getElementById(IDs);
	if(!IDDd) 
		{
		alert("Nincs ilyen ID: "+IDDd+" Kapott: "+IDs);
		return false;
		}
	alert("REMEK");
	return IDDd;
        }

Sajnos még soha nem jutottam el ahhoz, hogy alertben a REMEK jöjjön elő. Az IDDd mindig null, az IDs pedig a 12.

Próbáltam sima text bevitelivel is, aminek értéke van. ugyan ez a helyzet. a legtöbb variáció esetén a hibaüzenet, hogy a várt elem objektum.

Előre is köszönöm a segítséget, és mindenkinek boldog karácsonyt!
 
1

nem szám!

Hojtsy Gábor · 2006. Dec. 22. (P), 17.01
http://www.w3.org/TR/html401/types.html#type-name
ID and NAME tokens must begin with a letter ([A-Za-z]) and may be followed by any number of letters, digits ([0-9]), hyphens ("-"), underscores ("_"), colons (":"), and periods (".").
2

Magyarul

gtoma · 2006. Dec. 22. (P), 17.22
Köszi. Tudom nem emeltem ki, de magyar leírást kerestem. Leginkább azért, mert angol tudásom sajnos nem elég a teljes megfejtéshez.

Azonban a berakott linkedet megnéztem. Amennyit megértettem: nem mind1 milyen karaktereket használok a névben. Hát most kipróbáltam egyszerű 1 -el, zizi -vel de sajna ugyanaz.

Az IDDd null, az átvett érték (IDs) pedig jó.
4

Nem kezdődhet számmal az ID

Jano · 2006. Dec. 22. (P), 18.56
ID and NAME tokens must begin with a letter ([A-Za-z]) and may be followed by any number of letters, digits ([0-9]), hyphens ("-"), underscores ("_"), colons (":"), and periods (".").

Az ID és NAME tokenek kötelezően betűvel kell, hogy kezdődjenek ([A-Za-z]) ezután bármennyi számú betű, szám ([0-9]), kötőjel, alúlvonal(?)/aláhúzás jel, kettőspont vagy pont karakter állhat.

Ebből nekem a kettőspont és a pont nagyon meglepő, ugyanis a CSS kiválasztóknak simán bezavarhatnak. Pl. id="legparnas:hover" eseten #legparnas:hover pszeudo osztálynak is felfogható vagy id="link.hu" esetén #link.hu olyan id aminek hu az oszálya.
5

Köszi

gtoma · 2006. Dec. 22. (P), 19.38
Köszi a fordítást. Igazábol sajnos ezek az adatok nem segítenek, mert olyan ID vel is próbáltam ami csak betü volt.
3

nem név, hanem ID

gtoma · 2006. Dec. 22. (P), 17.25
Bocsi a név alatt az ID-re gondoltam. az ID-t javítottam.
6

document.getElementById(IDs)

torso · 2006. Dec. 23. (Szo), 01.36
Szia!

A DOM-ban kövesd a hierarchiát!
Kihagytad az értékadásnál a select szülőjét.
Tehát így próbáld meg:
var IDDd = document.getElementById(IDs);
G.
7

Nem oké teljesen

gtoma · 2006. Dec. 25. (H), 19.57
Köszönöm az eddigi segítséget. Sikerült némileg továbblépnem a szülö beírása tényleg segített, a másik probléma pedig, hogy az eddigi teszteknél azonnal futtattam a js-t így amikor az lefutott még tényleg nem létezett az az elem. :(. 'zonban 2 további probléma merült fel szorosan kapcsolodva a problémához.

prototype-t használok. A választ elküldöm a megfelelő funkciónak, azonban abban a funkcióban nem tudom elérni a proba objektum CountryFormID értékét. Csak úgy tudom elérni, ha beírom a létrehozott objektum nevét azaz így: proba.CountryFormID Ez persze nem megoldás, hiszen nem korlátozhazom le a kódban, hogy majd mi legyen az objektum neve. ELméletileg átadhatnám a funkciónak az adatot, de sajnos ugye ez pont a prototype válasz feldolgozása, így nem tudok +adatokat továbbítani.

A másik ilyen probléma, hogy nem müxik ez a dolog: document.getElementByID('listmenu').options[0] = new Option("Új ország felvitel","uj","");

function AnswerClear(ClearingAnswer)
	{
	var ClearingAnswer = ClearingAnswer.substring(2);
	SplitAnswer = ClearingAnswer.split('//');
	if (SplitAnswer[1] != "OK")
		{
		alert (SplitAnswer[1]);
		ClearAnswer = "";
		}
	else
		{
		ClearAnswer = SplitAnswer[2];
		}
	return ClearAnswer;
	}

function CountryList(ID)
	{
		this.CountryFormID = ID;
		this.QueryURL = 'adrserver.php';	
		this.QueryPars = 'com=countryquery&adr=country';
		this.QueryMethod = 'get';
	
	//functions
		this.ListAnswerNow = CountryAnswer;
		this.ListQueryNow = ListQuery;
	}

function CountryAnswer(originalRequest)
	{
	var answer = originalRequest.responseText;
	var FormID = this.CountryFormID;
	alert (answer+"\n "+FormID);
	document.getElementByID(FormID).options[0]=new Option("Új ország felvitel","uj","");
	data = AnswerClear(answer);
	MyOptions = data.split('**');
	alert (MyOptions);
	if (MyOptions == '') { MyOptions = ''; }
	for (i = 0; i<MyOptions.length; i++)
		{
			MyOption = MyOptions[i].split('*-');
			OptiV=MyOption[0];
			OptiN=MyOption[1];
			OptiI=MyOption[2];
			OptiNumber = i+1;
			document.getElementByID(FormID).options[OptiNumber]=new Option(OptiN+" ["+OptiI+"]",OptiV,"");
		}

	}

function ListQuery()
	{
		var url = this.QueryURL;
		var myMethod = this.QueryMethod;
		var myPars = this.QueryPars;
		var myAnswer = this.ListAnswerNow;
		var myAjax = new Ajax.Request( url, { method: myMethod, parameters: myPars, onComplete: myAnswer });
	}
sok órát töltöttem a neten való kereséssel (sajnos csak magyar irományok jöhetnek szóba), hogy megoldjam első "objektumom" problémáit. Kérlek amennyiben lehetőségetek van segítsetek. Szívesen veszek akár valamilyen olvasmányt is. (Amennyiben magyar, el is tudom olvasni :) )

köszönet az eddigi válaszokért is!