JavaScript GoogleChrome, Opera, Safari Combobox.SelecteValue-Fehler

Registriert
Apr. 2011
Beiträge
192
Hallo,
wieder mal habe ich ein Problem :(

Mein eig. simples JavaScript funktioniert einwandfrei im IE und FF, jedoch machen Opera, Safari, Google Chrome Probleme..

-jquery ist natürlich eingebunden.

PHP:
<div id=combobox>
	<select name=cb_tree_name_0 id=cb_tree_id_0>
		<option value=0>Ebene mit MutterID0</option>
		<option value=1>Ebene mit MutterID1</option>
		<option value=2>Ebene mit MutterID2</option>
		<option value=8>Ebene mit MutterID8</option>
	</select>
	
	<script type="text/javascript">
		$(function ()
		{
			$("#cb_tree_id_0").change(function()
			{
				alert(this.value);
				alert($('#cb_tree_id_0').val());
		});
	</script>
</div>

Ich habe hier meinen Code zusammengekürzt auf das wesentliche Problem - der selektierte Wert wird falsch ausgelesen. Firefox, IE funktionieren einwandfrei, GoogleChrome, Safari und Opera jedoch nicht.
(Die Browser in denen es nicht funktioniert wird immer der Wert als erstes steht (in diesem Fall 0) ausgegeben).


Was mache ich falsch?!

Danke :)
 
Mach mal um deine id-, name- und value-Attribute die "-Zeichen rein. Dies gehört zu einem validen Code. Wenn dein Code nicht valide ist, kann dir nicht jeder Browser garantieren, dass es diesen auch wie gewünscht behandelt.
Versuchs dann nochmal.
 
Zuletzt bearbeitet:
Zuletzt bearbeitet:
Code:
	<script type="text/javascript">
		$(document).ready(function ()
			{
				$("#cb_tree_id_0").change(function()
				{
					alert(this.value);
					alert($('#cb_tree_id_0').val());
			})});
	</script>

Du führst die Funktion nie aus, so wird auch das Event auf das Element nie registriert. So würde es zum Beispiel gehen.
Alternativ auch so
Code:
	<script type="text/javascript">
	(function ()
			{
				$("#cb_tree_id_0").change(function()
				{
					alert(this.value);
					alert($('#cb_tree_id_0').val());
			})})();
	</script>

Funktioniert ansonsten 1A auf der aktuellen Chrome Version.
 
Zuletzt bearbeitet:
Hallo, danke für die Antworten, leider ist mir der Unterschied(Außer der im Copy&Paste vergessene Funktionsabschluss) nicht ersichtlich (Fehler).

Ein paar Fragen habe ich jedoch trotzdem:
was heißt redundant?

PHP:
(function ()
{
$("#cb_tree_id_0").change(function()
{
alert(this.value);
alert($('#cb_tree_id_0').val());
})})();

Außerdem wurde hier "$" vor (function () vergessen und Strichpunkt am Ende?

Was ist der Unterschied bzw. für was werden die "()" benötigt?

Ich bin gerade drauf gekommen das mein Code einwandfrei funktioniert (auch der vorhandene oben). Das Problem verursacht dann:

PHP:
 $("#cb_tree_id_<?php echo $id; ?>").selectbox();

Dieser Code "formatiert" meine Combobox und stammt von:http://www.bulgaria-web-developers.com/projects/javascript/selectbox/

Weiß wer Abhilfe/Hilfe um die Combobox zu "stylen" per css/JavaScript ohne dieses Tool oder das Problem?

Dankeschön! :)

LG Lukas
 
Code:
; (function () {
 var a = "lokale Scope";
})();

var a = "globale Scope"; // Namenskollisionen mgl

Hierbei handelt es sich um Self Invoked Anonymous Function (eine anonyme Funktion die sich selbst aufruft). Der Vorteil ist, das alle Variablen in der lokalen Scope deklariert werden. D.h. das du dein Skript gegen eventuelle Namenskollisionen sicherst.
 
MisterPresident schrieb:
Ich bin gerade drauf gekommen das mein Code einwandfrei funktioniert (auch der vorhandene oben). Das Problem verursacht dann:

PHP:
 $("#cb_tree_id_<?php echo $id; ?>").selectbox();

Code:
$("#cb_tree_id_" + <?php echo \"$id\"; ?>).selectbox();
Würde ich spontan sagen. Wenn du alle Boxen gleich haben willst, dann ist das doch auch kein Problem. Ansonsten kannst du auch über den Parent gehen.. usw. Teste aber erstmal
 
Die Zuweisung macht ja kein Problem (Alle Comboboxes werden richtig formatiert) aber wenn sie formatiert wurden lest Chrome, etc. falsche Werte aus.
 
Der Code zum Auslesen ist aufjedenfall richtig. Dann liest du die falsche Box aus oder manipulierst da sonst was rum.

Ich kann mir schon denken woran es liegt. Poste bitte einfach mal alle Comboboxen und deine Auslese-Funktion und nicht wieder Sachen kürzen (nur nicht relevantes kannste rauswerfen)
 
Aufruf-PHP-Datei:

PHP:
if($_GET['OPTION'] == 'new')
{						
	?>
		<div id="new" class="combobox">
			<?php
				$id = 0;
				$werte = array($id);						
				create_tree_cb($werte[$id], $werte[$id], "new", "Weite Ebene hinzufügen", "save");
				
			?>
		</div>
		<div id="eingabe">
			<?php
				save_tree($id, "new");
			?>
		</div>
	<?php		
}

if($_GET['OPTION'] == 'alter')
{						
	?>
	<div id="old" class="combobox">
		<?php
			$id = 0;
			$werte = array($id);						
			create_tree_cb($werte[$id], $werte[$id], "old", "Diese Ebene verschieben", "alter_old");
			$id_old = 0;
		?>
	</div>
	<div id="new" class="combobox">
		<?php
			$id = 0;
			$id_new = 0;
			$werte = array($id);						
			create_tree_cb($werte[$id], $werte[$id], "new", "Ebene hierher verschieben", "alter_new");
		?>
	</div>
	<div id="eingabe">
		<?php
			alter_tree($id_old, $id_new);
		?>
	</div>
	<input type="button" name="Text 1" value="From" onclick="alert(from_j)">
	<input type="button" name="Text 1" value="To" onclick="alert(to_j)">
	<?php
	
}

PHP:
function create_tree_cb($id, $select, $where, $what, $action)
	{
		
		$sql = "SELECT * FROM object_tree WHERE ID_MAIN = '$id'";
		$db_erg = mysql_query( $sql );
		mysql_query("SET NAMES 'utf8'");

		if (!$db_erg )
		{
		  die('Ungültige Abfrage: ' . mysql_error());
		}
		else
		{
			if (mysql_num_rows($db_erg))
			{
				echo "<select name=\"cb_tree_name_" . $id . "_$where\" id=\"cb_tree_id_" . $id . "_$where\">";
				if ($what != "")
				{
					echo "<option value=\"$id\">$what</option>";
				}
				while ($zeile = mysql_fetch_array( $db_erg, MYSQL_ASSOC))
				{	
					echo "<option value=\"$zeile[ID]\"";
					if ($zeile['ID'] == $select)
					{
						echo " selected";
					}
					echo ">$zeile[NAME]</option>";
				}
				echo "</select>";
			}
			else if ($what != "")
			{
				echo "<select name=\"cb_tree_name_" . $id . "_$where\" id=\"cb_tree_id_" . $id . "_$where\">";
				echo "<option value=\"$id\">$what</option>";
				echo "</select>";
			}
		}
		
		
 		?>
		<script type="text/javascript">
		var to_j;
		var from_j;
		$(function ()
		{
			$("#cb_tree_id_<?php echo $id . "_" . $where; ?>").change(function()
			{		
				$.post("ajax.php",
				{
					todo:		"combobox",
					parent_id: 	$('#cb_tree_id_<?php echo $id . "_" . $where; ?>').val(),
					where:		"<?php echo $where; ?>",
					what:		"<?php echo $what; ?>",
					action:		"<?php echo $action; ?>",
				}, function(response)
				{
						setTimeout("finishAjax('<?php echo $where; ?>', '"+escape(response)+"')", 0000);
				});
				if(typeof(to_j)=="undefined")
				{
					to_j = 0;
				}
				if(typeof(from_j)=="undefined")
				{
					from_j = 0;
				}
				
		
				if("<?php echo $action; ?>" == "alter_new")
				{
					to_j = $('#cb_tree_id_<?php echo $id . "_" . $where; ?>').val();
				}
				else if("<?php echo $action; ?>" == "alter_old")
				{
					from_j = $('#cb_tree_id_<?php echo $id . "_" . $where; ?>').val();
				}
			
				if ("<?php echo $action; ?>" == "alter_old" || "<?php echo $action; ?>" == "alter_new")
				{
					$.post("ajax.php",
					{
						todo:		"eingabe",
						from:		from_j,
						to:			to_j,
						action:		"alter",
						parent_id: 	$('#cb_tree_id_<?php echo $id . "_" . $where; ?>').val(),
						where:		"<?php echo $where; ?>",
					}, function(response)
					{
						setTimeout("finishAjax('eingabe', '"+escape(response)+"')", 0000);
					});
				}
				else if ("<?php echo $action; ?>" == "save")
				{
					$.post("ajax.php",
					{
						todo:		"eingabe",
						from:		from_j,
						to:			to_j,
						action:		"save",
						parent_id: 	$('#cb_tree_id_<?php echo $id . "_" . $where; ?>').val(),
						where:		"eingabe",
					}, function(response)
					{
							setTimeout("finishAjax('eingabe', '"+escape(response)+"')", 0000);
					});
				}
			});
			
			$('#cb_tree_id_<?php echo $id . "_" . $where; ?>').selectbox();
		}); 
		</script>
		<?php 
	}

ajax.php

PHP:
<?php
	include 'functions.php';
	if($_REQUEST)
	{
		$action = $_REQUEST['action'];
		$id = $_REQUEST['parent_id'];
		$where = $_REQUEST['where'];
		
		if ($_REQUEST['todo'] == "combobox")
		{

			$where = $_REQUEST['where'];
			$what = $_REQUEST['what'];
			
			$werte = array($id);
			
			$werte = get_parent_ids($id, $werte);

			for ($i = sizeof($werte) - 1; $i >= 0; $i--)
			{
				if(empty($werte[$i-1]))
				{
					create_tree_cb($werte[$i], $werte[$i], $where, $what, $action);
				}
				else
				{
					create_tree_cb($werte[$i], $werte[$i-1], $where, $what, $action);
				}
			}
		}
		if ($_REQUEST['todo'] == "eingabe")
		{
			if ($action == "save")
			{
				save_tree($id, $where);
			}
			else if ($action == "alter")
			{
				$from = $_REQUEST['from'];
				$to = $_REQUEST['to'];
				alter_tree($from, $to);
			}
		}
	}
?>

PHP:
function save_tree($id, $where)
	{
		$akt = "cb_tree_name_" . $id . "_$where";
		?>
			<h2>Name der Ebene:</h2>
			<input type="text" value="" name="tb_name">
			<input type="submit" value="Speichern" name="btn_save">	
		
		<?php
		if (!empty($_POST['btn_save']))
		{				
			$input = $_POST['tb_name'];
			$sql = "SELECT * FROM object_tree WHERE NAME = '$input'";
			$db_erg = mysql_query( $sql );
			mysql_query("SET NAMES 'utf8'");
			if (!$db_erg)
			{
			  die('Ungültige Abfrage: ' . mysql_error());
			}
			else
			{
				$db_sel = mysql_select_db( MYSQL_DATENBANK )
				   or die("Auswahl der Datenbank fehlgeschlagen");
				
				$main = $_POST[$akt];
				$sql = "INSERT INTO object_tree (ID_MAIN, NAME) VALUES ('$main', '$input')";
				echo $sql;
				
				$db_erg = mysql_query($sql);
				if (!$db_erg )
				{
					die('Ungültige Abfrage: ' . mysql_error());
				}
				else
				{
					echo "$input wurde erfolgreich in $main eingetragen!";
				}
				
			}
		
		}
	}
	
	function alter_tree($from, $to)
	{
		$von = $from;
		$zu = $to;
		$from_cb = "cb_tree_name_$from" . "_old";
		
		echo $from;
		echo $to;
		$to_cb = "cb_tree_name_$to" . "_new";
		?>
			<h2>Name der Ebene:</h2>
			<input type="text" value="" name="tb_name">
			<input type="submit" value="Speichern" name="btn_save">	
		
		<?php
		echo $von;
		echo $zu;
		
		if (!empty($_POST['btn_save']))
		{
			if (!empty($_POST['btn_save'])) 
			{	
				print_r($_POST);
				echo $_POST['from'];
				echo $_POST['to'];
				echo $von;
				echo $zu;
				$input = $_POST['tb_name'];
				$sql = "SELECT * FROM object_tree WHERE NAME = '$input'";
				$db_erg = mysql_query( $sql );
				mysql_query("SET NAMES 'utf8'");
				if (!$db_erg)
				{
				  die('Ungültige Abfrage: ' . mysql_error());
				}
				else
				{
					$db_sel = mysql_select_db( MYSQL_DATENBANK )
					   or die("Auswahl der Datenbank fehlgeschlagen");
					
					$id_from = $_POST[$from_cb];
					$main_to = $_POST[$to_cb];
					$sql = "UPDATE object_tree SET ID_MAIN = '$main_to', NAME = '$input' WHERE ID= '$id_from'";
					echo $sql;
					
					$db_erg = mysql_query($sql);
					if (!$db_erg )
					{
						die('Ungültige Abfrage: ' . mysql_error());
					}
					else
					{
						echo "$input wurde erfolgreich in $main_to eingetragen!";
					}
					
				}
			}
		}
	}


Soooo das sollte der Gesamte Code sein. Wirklich ungekürzt.

Wie gesagt: FF + IE einwandfrei, Chrome, Opera, Safari.. Der oben genannte Fehler..


Ein Weiteres Problem habe ich auch noch:
wieso verliere ich in meiner funktion "alter_tree" meine beiden Parameter nach drücken des Buttons?


DANKE!

LG
Lukas
Ergänzung ()

Ihr könnt gerne meinen "Stil" kritisieren - da alles ein Autodidakt ist und ich es gerne verbessern würden - höchst wahrscheindlich mache ich auch vieles falsch/kompliziert - aber der wille wäre ja da.. :)
 
Zurück
Oben