Foros del Web » Programando para Internet » Javascript »

this.form=form ???

Estas en el tema de this.form=form ??? en el foro de Javascript en Foros del Web. Hola amigos, tengo algunas dudas conceptuales sobre el paso de parametros a una funcion JS, espero me podais aclara: al pasar this (en un evento ...
  #1 (permalink)  
Antiguo 09/04/2011, 05:37
 
Fecha de Ingreso: diciembre-2007
Mensajes: 299
Antigüedad: 16 años, 4 meses
Puntos: 2
Pregunta this.form=form ???

Hola amigos,
tengo algunas dudas conceptuales sobre el paso de parametros a una funcion JS, espero me podais aclara:

al pasar this(en un evento o funcion JS) como parametro, accedo al objeto, pero si paso this.form accedo al formulario de ese objeto.
No entiendo la utilidad de this. Si quiero acceder al formulario del objeto simplemente he de pasar el objeto form a la funcion, ¿no creeis?

<html><head>
<script type="text/javascript">
function f(obj){
alert(obj.name);}
</script>
</head>
<body>
<form name="formu">
<input type="text" name="aa" onblur="alert(this.value)">
<input type="button" name="bt" onclick="f(form)">
</form>
<form name="formu2">
<input type="text" name="aa2">
<input type="button" name="bt2" onclick="f(form)">
</form>
</body></html>

En este ejemplo, obtengo el mismo resultado con form y con this.form(probado en FF y en IE). No entiendo la diferencia, ¿me podeis aclarar esta duda?

Gracias, saludos:D
  #2 (permalink)  
Antiguo 09/04/2011, 06:24
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 20 años
Puntos: 834
Respuesta: this.form=form ???

En ese contexto no hace falta usar this (eso no significa que no sea útil; en otras situaciones this es fundamental), ya que es posible acceder a cualquier propiedad del elemento sin una referencia explícita. Por ejemplo, esto lanzaría un alert con la palabra "button", que es el valor correspondiente al type del elemento que lanza el evento:
Código PHP:
<input type="button" name="bt" onclick="alert(type)"
  #3 (permalink)  
Antiguo 09/04/2011, 07:50
Avatar de _cronos2
Colaborador
 
Fecha de Ingreso: junio-2010
Mensajes: 2.062
Antigüedad: 13 años, 11 meses
Puntos: 310
Respuesta: this.form=form ???

Cita:
Iniciado por Panino5001 Ver Mensaje
En ese contexto no hace falta usar this (eso no significa que no sea útil; en otras situaciones this es fundamental), ya que es posible acceder a cualquier propiedad del elemento sin una referencia explícita. Por ejemplo, esto lanzaría un alert con la palabra "button", que es el valor correspondiente al type del elemento que lanza el evento:
Código PHP:
<input type="button" name="bt" onclick="alert(type)"
Qué bueno! No lo sabía
Saludos (:
__________________
" Getting older’s not been on my plans
but it’s never late, it’s never late enough for me to stay. "
Cigarettes - Russian Red
  #4 (permalink)  
Antiguo 09/04/2011, 08:39
 
Fecha de Ingreso: diciembre-2007
Mensajes: 299
Antigüedad: 16 años, 4 meses
Puntos: 2
Pregunta Respuesta: this.form=form ???

Gracias por tu respuesta Panino5001,
entiendo el codigo de tu post pero sigo sin ver la utilidad de this, en tu ejemplo no fue necesario, no?? y siempre podre acceder al formulario del objeto(mediante la propiedad form) y desde ahi a la propiedad del objeto(mediante form.nameObj.propiedad).

funcion(x) {
alert(x.bt.type);
}


<input type="button" name="bt" onclick="funcion(form)">
  #5 (permalink)  
Antiguo 09/04/2011, 08:49
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: this.form=form ???

buenas,

la explicacion de este concepto es que los eventos definido como atributo tienen un scope o contexto mas complejo a diferencia de lo que se puediera considerar un codigo regular de javascript. por eso, como bien cita panino5001, es posible acceder a cualquier propiedad del elemento sin una referencia explícita. lo que sucede es algo similar a la resolucion de variables en los scopes de las funciones. basicamente, lo que hace el interprete es determinar si dicho token o identificador existe en el scope donde esta definido el evento y luego continua la busqueda en un scope mas alto en la jerarquia hasta encontrar dicho identificador, ya sea como propiedad o variable. en el ejemplo de panino5001, type primero es buscado en el contexto de la funcion, luego en el objeto Element de <input>. es aqui donde termina la busqueda porque en dicho objeto existe la propiedad type. usando ligeramente el ejemplo de panino para señalar lo anterior.
Código:
// type en el contexto de <input> ;
<input type="button" name="bt" onclick="alert(type)"> 

// igual que el anterior ;
<input type="button" name="bt" onclick="type = true; alert(type)">

// type en el contexto de la funcion ;
<input type="button" name="bt" onclick="var type = true; alert(type)">
notese el segundo y tercer input. el segundo input parece declarar la variable type, pero en realidad no se esta creando. lo que hace es buscar la variable o propiedad type de cualquier contexto y le asigna el valor true. si no se encuentra type en ningun scope, se hubiera creado una variable global. en este caso, esta modificando la propiedad type de <input> convirtiendo asi el elemento a tipo text. de modo que el alert mostrara text. el tercer ejemplo es distinto porque esta declarando explicitamente una variable en el contexto de la funcion.

en conclusion, algo similar es lo que sucede con form en el ejemplo original del autor. form es una propiedad de <input>. no obstante, no estamos limitado al contexto de <input>. como antes indique, se extiende hasta el scope mas alto en la jerarquia, de lo contrario las variables globales no serian legibles. lo que significa que podemos acceder a otras propiedades, siempre y cuando en el recorrido de los scopes no exista una propiedad o variable que lo superponga. por ejemplo, forms es la coleccion de formularios y se accede desde el objeto document.

Código:
// forms en document ;
<input type="button" name="bt" onclick="alert(forms)"> 

// forms aqui representa un elemento ;
<form>
<input type="button" name="bt" onclick="alert(forms)"> <br />
<input type="checkbox" name="forms" /> checkbox forms
</form>
en el segundo ejemplo, forms es un <input> porque forms pasa a ser una propiedad del elemento <form> debido a que se le ha asignado como valor al atributo name de un control.

quien tenga el libro Javascript: The Definitive Guide, puede encontrar los detalles en la seccion 17.1.6 de la quinta edicion, o la seccion 19.1.6 de la cuarta edicion.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.

Última edición por zerokilled; 10/04/2011 a las 08:14 Razón: correcciones literales
  #6 (permalink)  
Antiguo 10/04/2011, 04:54
Avatar de _cronos2
Colaborador
 
Fecha de Ingreso: junio-2010
Mensajes: 2.062
Antigüedad: 13 años, 11 meses
Puntos: 310
Respuesta: this.form=form ???

Excelente post @ZK! Lástima de karma... XD
Saludos (:
__________________
" Getting older’s not been on my plans
but it’s never late, it’s never late enough for me to stay. "
Cigarettes - Russian Red

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:59.