Methodenaufruf bei onLick - Simpler Fehler

xewat

Grünschnabel
Hallo,
ich habe im grunde genommen einen sehr simplen Code. Warum es nicht Funktioniert verstehe ich nicht. Hier ist das eigentlich was da ist:

Js-Datei:

...
function test()
{
alert("test");
}
...

HTML-Datei:

<a href="javascript:join123()">
<div . . .></div>
</a>

alternativ probiert:

<a href="#" onclick="javascript:join123()">



Ich habe das auch mal mit Simikolon dahinter auch usw probiert aber es geht irgend wie nicht. Als Test, um zu sehen, ob er die JS-Datei implementiert, habe ich mal sofort einen alert machen lassen. Das Funktioniert.

Problem:

-Methode test() ist nicht definiert




Wer das alles im Einsatzmöchte:

http://www.mazlum-eroglu.de/data/logic.js
http://www.mazlum-eroglu.de/poker.html
 
Momentan hast du dieses:
Code:
$(document).ready(function()
{	
	function join123()
	{
	alert("joined");
	}
});

Problem: so, wie du join123 definierst, ist diese function nicht global, sondern nur innerhalb der ready-function sichtbar.

Mögliche Lösungen:
  • die Funktion explicit dem window-object zuweisen:

Code:
$(document).ready(function(){	
	window.join123=function(){
	  alert("joined");
	}
});
  • oder die Funktion ausserhalb von $.ready() definieren:
Code:
$(document).ready(function(){});
function join123(){
	  alert("joined");
	}
 
Ich bedanke cmich für deine Lösung. Ich habe den 2ten Lösungsvorschlag angewendet und es klappt. Hat der zweite Vorshclag Nachteile? Und kann man den "window" mehrere objecte zu weisen also z.b. so:
window.join123=function(){
alert("joined");

window.logOut=function(){
alert("logged Out");
 
Hat der zweite Vorshclag Nachteile? Und kann man den "window" mehrere objecte zu weisen

Beide Vorschläge machen dasselbe, sie erzeugen die Funktion im Geltungsbereich des window-Objektes.

Du kannst dort soviele Funktionen zuweisen, wie du willst, so wie du auch beliebig viele Variablen global definieren kannst(jede Variable die du in keinem besonderen Geltungsbereich definierst, wird automatisch dem globalen Geltungsbereich zugeordnet, und jener ist in einem WebBrowser das window-object).

Das Problem dabei ist, daß man im globalen Geltungsbereich mal schnell eingebaute Methoden/Eigenschaften überschreibt.

Vorzuziehen ist es daher, ein einzelnes Objekt global zu definieren, und die Methoden in diesem Objekt zu definieren. So hat man nur einen einzigen Namen den man hinsichtlich von Namenskonflikten im Auge behalten muß.
 
Danke. du hast es wirklich super erklärt. Kannst du mir vllt. noch einen Beispiel dafür geben? Also einen Globalen Object mit mehreren Objekten darin. (Bin eig. ein Java-Programmierer und hab von Javascript nicht wirklich Ahnung). Würde das so aussehen?:

window.action=function(){

function join123(){
alert("joined");
}

function logOut(){
alert("logged Out");
}
}


Und wie erfolgt dann der Aufruf der Methoden, die darin enthalten sind? Vllt. so?:

action.join123();
 
Code:
window.myStuff={
  join123:  function(str){
              alert("joined with argument:"+str);
            },
  logOut:  function(){
              alert("logged Out");
            }
}


window.myStuff.join123('Hello world'); 
window.myStuff.logOut();
 
Das hat irgend wie nicht geklappt. Hab das hier ausprobiert: (in einem leeren js-datei)

window.myStuff={
join123: function(str){
alert("joined with argument:"+str);
},
logOut: function(){
alert("logged Out");
}
}

<a href="#" onclick="window.myStuff.join123('Hello world')">LogIn</a>

hab auch das probiert:

<a href="#" onclick="myStuff.join123('Hello world')">LogIn</a>



Fehler: window.myStuff is not defined

bzw. Zitat: "ReferenceError: logic is not defined"
 
Zuletzt bearbeitet:
Zurück