• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

[GELÖST] Javascript funktioniert in Firefox, jedoch nicht in Chrome

Naitscho

New member
Guten Abend,

ich habe ein Problem. Ich habe ein Script geschrieben, welches mir bestimmte Werte anzeigen soll, je nach der Auswahl, die ich getroffen habe. In Firefox funktioniert mein Script ohne Probleme, jetzt habe ich aber heute gesehen, dass es mit Google Chrome leider nicht funktioniert.

Ich lasse eine while Schleife laufen und gebe den Inhalt einer Tabelle aus, dabei erzeuge ich mit jedem Eintrag, welcher in der Tabelle zu finden ist eine neue Javascript-Funktion (wird durchnummeriert.) Diese Funktion wird dann durch den entsprechenden Wert aufgerufen durch ein onClick-Event (onClick="cAuswahl<?php echo $zähler4 ?>()").

Code:
<select name='newClan'>
<option selected='selected' onClick="cAuswahlNichts()" value=''>Normal (0 EP)</option>
<?php 

$zähler4=1;
	while($zeile = mysqli_fetch_array( $db_erg3, MYSQL_ASSOC))
		{
?>
			
			<option value='<?php echo $zeile['name'] ?>' onClick="cAuswahl<?php echo $zähler4 ?>()"><?php echo $zeile['name']?> (<?php echo $zeile['cost'] ?> EP)</option>
<script language="javascript" type="text/javascript">
// Auswahl für Clan.
function cAuswahl<?php echo $zähler4 ?>()
{
	var c_clan = document.c_gener1.newClan.options[document.c_gener1.newClan.selectedIndex].value;
	var clanaNacht<?php echo $zähler4 ?> = '<?php echo $zeile['auto_vn'] ?>';
	var clanaVort<?php echo $zähler4 ?> = '<?php echo $zeile['auto_s'] ?>';
	var clanCost<?php echo $zähler4 ?> = <?php echo $zeile['cost'] ?>;
	var clanName<?php echo $zähler4 ?> = '<?php echo $zeile['name'] ?>';
	var clanLink<?php echo $zähler4 ?> = '<?php echo $zeile['link'] ?>';
	var c_startEP = 0;
	
	
	if(c_clan == clanName<?php echo $zähler4 ?>) {
		c_EP = c_startEP -= clanCost<?php echo $zähler4 ?>;
		document.getElementById("clanInfoLink").href= clanLink<?php echo $zähler4 ?>;
		document.getElementById("clanInfoLink").innerHTML= clanName<?php echo $zähler4 ?>+" Claninfos";
		document.getElementById("anacht").innerHTML = clanaNacht<?php echo $zähler4 ?>;
		document.getElementById("avort").innerHTML = clanaVort<?php echo $zähler4 ?>;
	}
	else{}

	if(c_EP <= 0) {
		uebergabe()
		document.c_gener1.EP.style.backgroundColor = 'transparent';
		document.c_gener1.Submit.disabled = false;
	}
	else {
		uebergabe()
		document.c_gener1.EP.style.backgroundColor = 'red';
		document.c_gener1.Submit.disabled = true;
	}

	}

</script>


<?php
$zähler4++;
		}
?>


Hat vielleicht jemand eine Idee an was es liegen könnte?

Vielen Dank und Grüße

Naitscho
 
Zuletzt bearbeitet von einem Moderator:
Ich sehe nur das das Select Tag nicht geschlossen wurde ist aber in HTML5 Erlaubt.
Zum besseren Verständniss wäre der code wie er im Browser ausgegeben wird also der Seitenquelltext eine große Hilfe
das man sieht was denn das php so ausgegeben hat.
 
Ich habe den Code, der in Chrome ausgegeben wird mal in ein .txt File gepackt und als Anhang hochgeladen, da er sonst zu lang wäre, wenn ich ihn direkt poste.

So weit ich das sehe, holt er die Einträge für die Variablen alle richtig aus der Datenbank ab.
Ich habe auch den <select> Tag geschlossen.
 

Anhänge

  • Code.txt
    23,2 KB · Aufrufe: 2
Ich habe den Code, der in Chrome ausgegeben wird mal in ein .txt File gepackt und als Anhang hochgeladen, da er sonst zu lang wäre, wenn ich ihn direkt poste.
in solchen fällen reduziere ich den code so weit bis nur noch das minimum zur fehlererzeugung übrig ist. meistens sieht man den fehler schon direkt. wenn nicht frage ich in einem fachforum konkret zum minimierten code.
 
So gesehen ist er schon auf ein minimum Readuziert, es ist nur die Augabe, die mein Script oben ausgibt.
Es ist sogesehen 20 mal der selbe Code, nur mit anderen Werten.

Hier wäre der sozusagen reduzierte Code mit nur einer Aufzählung:

Code:
<td>
			<select name="newClan">
			<option selected="selected" onclick="cAuswahlNichts()" value="">Normal (0 EP)</option>
			
			<option value="Aburame" onclick="cAuswahl1()">Aburame (350 EP)</option>
<script language="javascript" type="text/javascript">
// Auswahl fur Clan.
function cAuswahl1()
{
	var c_clan = document.c_gener1.newClan.options[document.c_gener1.newClan.selectedIndex].value;
	var clanaNacht1 = 'Offensichtlich anders 2, Verpflichtungen gegenuber Clan';
	var clanaVort1 = '';
	var clanCost1 = 350;
	var clanName1 = 'Aburame';
	var clanLink1 = '../wiki/doku.php?id=bluterben_und_clans#aburame_350ep';
	var c_startEP = 0;
	
	
	if(c_clan == clanName1) {
		c_EP = c_startEP -= clanCost1;
		document.getElementById("clanInfoLink").href= clanLink1;
		document.getElementById("clanInfoLink").innerHTML= clanName1+" Claninfos";
		document.getElementById("anacht").innerHTML = clanaNacht1;
		document.getElementById("avort").innerHTML = clanaVort1;
	}
	else{}

	if(c_EP <= 0) {
		uebergabe()
		document.c_gener1.EP.style.backgroundColor = 'transparent';
		document.c_gener1.Submit.disabled = false;
	}
	else {
		uebergabe()
		document.c_gener1.EP.style.backgroundColor = 'red';
		document.c_gener1.Submit.disabled = true;
	}

	}

</script>

[...]

</select>
		</td>
 
Was heißt das denn genau? Steht etwas in der Fehlerkonsole?

PS: Warum ist c_EP eine globale Variable? Und diese muss auch nicht immer definiert sein, wenn du sie abfragst.

Ich bekomme keine Fehlermeldung in der Fehlerkonsole. Es funktioniert dahingehend nicht, dass die Veränderungen am HTML Code nicht durchgeführt werden. Sprich die Einträge bei "clanInfoLink", "anacht" und "avort" ändern sich nicht. In Firefox tun sie dies jedoch.

c_EP ist eine Globale Variable, weil auch andere Scripte auf sie zugreifen außerhalb dieser Funktion.


Warum machst du überhaupt so viele Funktionen und arbeitest nicht stattdessen mit Funktionsparametern?

Weil ich in noch am Anfang meiner Programmierkünste stehe und deshalb nicht wirklich einen Überblick habe was das ist. Ich habe eben einfach angefangen zu Programmieren und es hat eben auch so funktioniert (zumindest im Firefox Browser ;)) Aber ich werde mich hier mal einlesen, vielleicht hilft es mir ja, danke für den Hinweis.
 
Ah - ich sehe das Problem: der onclick auf den <option>s ist falsch. Du musst einen onchange auf dem <select> setzen... und damit musst du auch deine Funktionslogik ensprechend der Anmerkung von miniA4kuser umbauen...

... um das zu realisieren, würde ich die Daten, die du aus MySQL bekommst, direkt bei den <option>s als data-*-Attribute speichern.
 
Also ich habe es hin bekommen!

Habe durch den Umbau etwas Code gespart und es funktioniert nun auch in Chrome.

Ich habe, wie du sagtest die Daten aus MySQL in den option Part geschrieben und lasse diese dann auslesen und eintragen.

Code:
			<select id='clanAuswahl' name='newClan' onChange="clanAuswahl2()">
			<option selected='selected' data-clanVort=' ' data-clanaNacht=' ' data-clanCost='0' value=''>Normal (0 EP)</option>
<?php 
// Clan Auswahlliste + Javascript für die Automatischen Nachteile/Vorteile + Abzüge bei der gesamt EPzahl.
	while($zeile = mysqli_fetch_array( $db_erg3, MYSQL_ASSOC))
		{
?>
			
	<option value='<?php echo $zeile['name'] ?>' 
			data-clanaVort='<?php echo $zeile['auto_s'] ?>' 
			data-clanaNacht='<?php echo $zeile['auto_vn'] ?>' 
			data-clanCost='<?php echo $zeile['cost'] ?>'
			data-clanLink='<?php echo $zeile['link'] ?>'
			data-clanName='<?php echo $zeile['name'] ?>'><?php echo $zeile['name']?> (<?php echo $zeile['cost'] ?> EP)</option>




<?php
		}
?>		
</select>

Code:
function clanAuswahl2()
{
var c_startEP = 0;
var selected = document.getElementById('clanAuswahl').options[document.getElementById('clanAuswahl').selectedIndex];
	c_EP = c_startEP -= selected.getAttribute('data-clanCost');
	document.getElementById("clanInfoLink").href= selected.getAttribute('data-clanLink');
	document.getElementById("clanInfoLink").innerHTML= selected.getAttribute('data-clanName')+" Claninfos";
	document.getElementById('clanaNacht').innerHTML = selected.getAttribute('data-clanaNacht');
	document.getElementById('clanaVort').innerHTML = selected.getAttribute('data-clanaVort');
	uebergabe();
}

Danke für die Hilfe! :)
 
Zurück
Oben