Ver Mensaje Individual
  #1 (permalink)  
Antiguo 03/02/2010, 08:39
FFreddyy
 
Fecha de Ingreso: enero-2009
Mensajes: 56
Antigüedad: 16 años, 1 mes
Puntos: 1
Problema con el ámbito de una función.

Lo que quiero es saber si hay alguna forma de pasar parámetros a una función f que se la asigno al evento onclick de la siguiente forma button.onclick=f; ya que lo que intenté fué accesar desde dentro de f una variable definida fuera, pero me surge un erro, como pueden apreciar:

Código:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>

<head>
	<title>Editor de texto</title>
	<meta name="GENERATOR" content="Quanta Plus">
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
	<style type="text/css">
		div{
			text-align:left;
			margin:auto;
			width:95%;
			height:200px;
			border:2px silver solid;
		}
	</style>
	<script language="JavaScript" type="text/javascript">

		function createControls( editableDiv ){
		//Crea un div con controles para el div editable exactamente después del div Editable
		//Cada boton tiene un id conforma ("editableDivControl"+[tag del elemento HTML correspondiente al control]) ej: "editableDivControlh1"
			//editableDivControlB
			function onclickEditableDivControl(  ){
			//Modifica el objeto window.editableDivNamespace.action asignándole la acción correspondiente al boton en cuestión, y deja dicho botón activado o desactivado según sea necesario;

				//newButton definida fuera de la función
				var button=newButton;

				//Modifico el objeto y obtengo la propiedad que contenía antes
				if( !window.editableDivNamespace ){
					window.editableDivNamespace=new Object;
					window.editableDivNamespace.action=button.value;

					//Estilo de un boton presionado
					button.style.background="#888";

				}else if( !window.editableDivNamespace.action ){
					window.editableDivNamespace.action=button.value;

					//Estilo de un boton presionado
					button.style.background="#888";

				}else if( window.editableDivNamespace.action==button.value ){
					releasedButton=window.editableDivNamespace.action;
					window.editableDivNamespace.action="";

					//Estilo de un boton libre
					button.style.background="#ccc";

				}else{
					releasedButton=window.editableDivNamespace.action;
					window.editableDivNamespace.action=button.value;

					//Estilo de un boton presionado
					button.style.background="#888";

					//Estilo de un boton libre
					document.getElementById( "editableDivControl"+window.editableDivNamespace.action ).style.background="#ccc";

				}

				
			}

			//matriz que contien los elementos correspondientes a los botones, para ind par ind=(Nombre del botón), ind+1=(value del botón)
			var buttonsElements=new Array( "Negrita","b" , "Itálica","i" , "Emfásis" , "em" );

			//Elemento que contendrá los botones de control
			var controlsDiv=document.createElement( "div" );

			//Recorro la matriz buttonsElements creando botones y agregandolos al div controlsDiv
			for( ind=0; ind<buttonsElements.length ; ind+=2 ){
				var newButton=document.createElement( "button" );
				newButton.appendChild( document.createTextNode( buttonsElements[ind] ) );
				newButton.value=buttonsElements[ind+1];
				newButton.id="editableDivControl"+buttonsElements[ind+1];

				newButton.onclick=onclickEditableDivControl;

				controlsDiv.appendChild( newButton );
			}

			document.body.appendChild( controlsDiv );

		}

	</script>
</head>
<body onload="createControls( document.getElementById( 'editor' ) )">

	<div id="editor" ></div>
</body>
</html>