You are not logged in.

  • Login

h4bib

Unregistered

1

Wednesday, December 6th 2006, 12:34pm

Problem mit prototype

hi,

ich habe gerade deine super anleitung gelesen und versucht es zu integrieren.. jedoch ohne erfolg.. ich benutze http://prototype.conio.net/ (JavaScript Framework), was folgenden Ajax aufruf hat:

JavaScript Code

1
2
3
4
5
6
function getHTML(url,param)
	{
		var url = url;
		var pars = param;
		var myAjax = new Ajax.Updater({success: 'content'}, url, { method: 'get', parameters: pars, onFailure: reportError });
	}


ich habe vergebens probiert den Listener zu integrieren :(

JavaScript Code

1
link.onclick = function () {myLightbox.start(this); return false;}


Kannst du mir dabei weiterhelfen?


edit:

hi, also ich habs weiterprobiert und folgendes hinbekommen:

JavaScript Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
function pollContent(id){
		if (document.getElementById&&document.getElementById(id)){
			alert(id);
			var targetObj = document.getElementById(id);
		        var anchors = targetObj.getElementsByTagName('a');
		        for (var i=0; i<anchors.length; i++) {
		        	alert(i);
		                var anchor = anchors[i];
		                var relAttribute = String(anchor.getAttribute('rel'));
		                if (anchor.getAttribute('href') && (relAttribute.toLowerCase().match('lightbox'))){
		                        anchor.onclick = function () {myLightbox.start(this); return false;}
		                }
		        }
		}else{
			alert("nochmal");
			setTimeout("pollContent('"+id+"')", 1000)
		}
	}


mit folgender URL rufe ich auf:

HTML Code

1
<a href=# onclick="getHTML('test.php','class=projekte');pollContent('content');">


jetzt das problem..

die funktion greift immer, aber geht immer nur ab dem zweiten besuch des links in den "if" teil rein!

meine "else abfangtechnik" greift gar nicht :(

hilfääää :roll:

soooooooo :) sorry.. ein letztes mal.. jetzt gehts.. zwar komisch aber geht halt
irgendwie kommt alles bischen verzögert und ich hoffe das ich mit 1500 ms mit im rennen bin (1000ms gehen nicht!).. ich hoffe irgendwann auf eine bessere lösung..

JavaScript Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
function pollContent(id){
		if (document.getElementById&&document.getElementById(id)){
			setTimeout("wait('"+id+"')", 1500);		
		}else{
			setTimeout("pollContent('"+id+"')", 1000)
		}
	}
 
	function wait(id){
		if (navigator.appVersion.indexOf("MSIE")!=-1){ pause(50); }; 
		var targetObj = document.getElementById(id);
	        var anchors = targetObj.getElementsByTagName('a');
	        for (var i=0; i<anchors.length; i++) {
	                var anchor = anchors[i];
	                var relAttribute = String(anchor.getAttribute('rel'));
	                if (anchor.getAttribute('href') && (relAttribute.toLowerCase().match('lightbox'))){
	                	//alert('ja');
	                	anchor.onclick = function () {myLightbox.start(this); return false;}
	                }
	        }
	}
 
/* nur beim ie benötigt */
function pause(numberMillis) {
	var now = new Date();
	var exitTime = now.getTime() + numberMillis;
	while (true) {
		now = new Date();
		if (now.getTime() > exitTime)
			return;
	}
}


Gruss
h4bib

2

Wednesday, December 6th 2006, 9:34pm

Prototype ist toll :-D
versuch mal Folgendes

JavaScript Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
var ff = function() {
                var id = 'xx';
                if (document.getElementById&&document.getElementById(id)){
                        alert(id);
                        var targetObj = document.getElementById(id);
                        var anchors = targetObj.getElementsByTagName('a');
                        for (var i=0; i<anchors.length; i++) {
                                alert(i);
                                var anchor = anchors[i];
                                var relAttribute = String(anchor.getAttribute('rel'));
                                if (anchor.getAttribute('href') && (relAttribute.toLowerCase().match('lightbox'))){
                                        anchor.onclick = function () {myLightbox.start(this); return false;}
                                }
                        }
                }else{
                        alert("nochmal");
                        setTimeout("pollContent('"+id+"')", 1000)
                }
        } 
 
        if(enableCache){
                jsCache[url] =  dynamicContent_ajaxObjects[ajaxIndex].response;
        }
        dynamicContent_ajaxObjects[ajaxIndex] = false;
 
        ajax_parseJs(targetObj)
}


und ändere dein AJAX Objekt so um

JavaScript Code

1
var myAjax = new Ajax.Updater({onSuccess: ff}, ....


dadurch müsste protoype sich nun darum kümmern, die Lightbox Parse Funktion sofort aufzurufen, wenn der Inhalt geladen wurde.

h4bib

Unregistered

3

Thursday, December 7th 2006, 8:55am

hmm..

also leider hat das ganze nicht geklappt.. er läd dir inhalte irgendwie nicht..

alert(id); in der funktion ff() gibt er noch aus...

hier nochmal das ganze script:

</script>

JavaScript Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
<script language="JavaScript">
 
	//Effect.Fade('content');
	//Effect.Fade('systemWorking');
	//Effect.Appear('systemWorking');
	//Effect.Appear('content');
 
	var myGlobalHandlers = {
 
		onCreate: function(){
			//Effect.Fade('content',{duration: 1});
			Element.hide('content');
			//alert('show systemworking');
			Element.show('systemWorking');
		},
 
		onComplete: function() {
			if(Ajax.activeRequestCount == 0){
				Effect.Fade('systemWorking');
				//Element.hide('systemWorking');
				//alert('hide systemworking');
				//alert('show content');
				Effect.Appear('content',{duration: 1});
				//Element.show('content');
			}
		}
	};
 
	Ajax.Responders.register(myGlobalHandlers);
 
	function getHTML(url,param)
	{
		var url = url;
		var pars = param;	        
		var myAjax = new Ajax.Updater({success: ff(url)}, url, { method: 'get', parameters: pars, onFailure: reportError }); 
	}
 
	function reportError(request)
	{
		$('systemWorking').innerHTML = request.responseText;
	}
 
	function ff(){
		var id = 'content';
		var targetObj = document.getElementById(id);
	        var anchors = targetObj.getElementsByTagName('a');
		alert(id);
	        for (var i=0; i<anchors.length; i++) {
	        	alert(i);
	                var anchor = anchors[i];
	                var relAttribute = String(anchor.getAttribute('rel'));
	                if (anchor.getAttribute('href') && (relAttribute.toLowerCase().match('lightbox'))){
	                	alert('ja');
	                	anchor.onclick = function () {myLightbox.start(this); return false;}
	                }
	        }			
	}


kurzes update: nur wenn ich den wert 'id' zurückgebe läd er halt inhalte nach.. jedoch greift die for schleife irgendwie nach belieben manchmal zu... :/ also leider hats erst mal nix gebracht.. so schade ey!

JavaScript Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
function ff(){
		var id = 'content';
		var targetObj = document.getElementById(id);
	        var anchors = targetObj.getElementsByTagName('a');
		for (var i=0; i<anchors.length; i++) {
	                var anchor = anchors[i];
	                var relAttribute = String(anchor.getAttribute('rel'));
	                if (anchor.getAttribute('href') && (relAttribute.toLowerCase().match('lightbox'))){
	        	       	alert(anchor);
	                	anchor.onclick = function () {myLightbox.start(this); return false;}
	                }
	        }			
	return id;
	}

4

Thursday, December 7th 2006, 9:32am

nutzt du firefox und meldet die Fehlerkonsole irgendwelche Fehler?
"element not found" oder ähnliches?

Solltest übrigens drauf achten validen HTML Code zu schreiben:
<script language="JavaScript"> gibts nicht mehr.
Heißt

HTML Code

1
<script type="text/javascript">


Parameter musst du alles in Anführungszeichen schreiben:

HTML Code

1
<a href="#" onclick="...">...</a>

h4bib

Unregistered

5

Thursday, December 7th 2006, 9:35am

ne..

die konsole gibt keine fehler aus..

hier ist der aufruf..

<a href="#" onclick="getHTML('test.php','class=projekte');">

also die funktion ff() versucht meiner meinung nach alle "a" tags vor dem laden das contents zu finden und greift deswegen nicht richtig irgendwie.. also es müsste erst nach dem laden des contents, die schleife durchlaufen.. dann müsste es doch gehen?

ich werd am ende eh mal alles durchchecken bezüglich validem html.. aber mich ärgerts das das ganze nicht läuft... sehr schade :(

meine version von gestern ging an meinem heimischen rechner zb. nur sporadich, wobei hier auf arbeit alles lief..

sooooooo kurzes update mal wieder, jetzt gehts, zwar bischen unschön aber läuft:

HTML Code

1
<a onmouseover="ff();" rel="lightbox" href="bild.jpg"><img src=bild_klein.jpg></a>


und hier die passende funktion dann halt:

JavaScript Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function ff(){
		var id = 'content';
		if (document.getElementById&&document.getElementById(id)){ 
		//alert(id);	
			var targetObj = document.getElementById(id);
		        var anchors = targetObj.getElementsByTagName('a');
			for (var i=0; i<anchors.length; i++) {
	        	       	var anchor = anchors[i];
		                var relAttribute = String(anchor.getAttribute('rel'));
		                if (anchor.getAttribute('href') && (relAttribute.toLowerCase().match('lightbox'))){
		        	       	//alert(anchor);
		                	anchor.onclick = function () {myLightbox.start(this); return false;}
		                }
		        }
		}		
	}


also erst wenn man ein mouseover tätigt klappts tatsächlich...

Social bookmarks