2012-01-26 15 views
6

Sé que esto es básico, pero no puedo pasar "esto" como parámetro a una función de JavaScript. Estoy insensible por intentar ...Cómo pasar la referencia 'this' a una función javascript de una etiqueta <a>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>Untitled Document</title> 
<script language="javascript" type="text/javascript"> 
    function ko(control.id){ 
    alert(control); 
} 
</script> 

<body> 
<div id"lala"> 
    <a id="la" href="javascript:ko(this)" >Votes & Concerns</a> 
</div> 

</body> 
</html> 

La alerta me dice "undefined!"

+0

¿Qué estás tratando de hacer exactamente? ¿Quieres que te avise ("Votos y Preocupaciones")? De todos modos, puede comenzar por pasar "la" como una cadena, luego obtenerElementByID ("la") para obtener la etiqueta como un objeto DOM. – btown

+0

Estoy tratando de usar la jerarquía Dom para descubrir los ID de los muchos DIV en la pantalla. – DKean

Respuesta

11
<a id="la" href="#" onclick="ko(this); return false;" >Votes & Concerns</a> 
+0

¡Su solución es la única que funcionó! Felicitaciones, pero sobre todo gracias. Pero, por favor, dígame qué significa "devolver falso"; ¿¿¿es sobre??? – DKean

+0

Supongo que la función javascript regresa a la llamada, pero ¿dónde puede devolver la llamada a ??? Eliminé el resultado falso; y todavía funciona! Pero soy un novato ... tal vez me falta algo ... – DKean

+3

Para eventos en general si 'devuelve falso;' evitará que la acción predeterminada del evento continúe. Con una etiqueta de anclaje y un evento de clic, la acción predeterminada es navegar al 'href' especificado; en este caso, ori lo ha ajustado a" # "para que permanezca en la página actual, pero si no devuelve' false' el navegador generalmente se desplazará de nuevo a la parte superior de la página actual. – nnnnnn

3

Usted lo tiene al revés:

function ko(control){ 
    alert(control.id); 
} 

control es el objeto (el elemento objeto DOM, para ser exactos) que está pasando con ko(this). A continuación, desea acceder a su propiedad id con control.id.


NB también hay formas mucho mejores de hacerlo. Lo mejor es asignar los controladores de eventos en bloques de JavaScript en lugar de en atributos de HTML. Por ejemplo:

document.getElementById('la').onclick = function() { 
    alert(this.id); 
}; 
+0

la razón por la que estoy haciendo esto es para obtener la ID del DIV externo, en realidad. El valor 'id' no se puede conocer, pero por inspección. Así que no tengo ningún uso para el comando "getElementById". – DKean

+0

@DennisKean Si es el primer 'div' en el documento, puede usar' document.getElementsByTagName ('div') [0] .onclick = ... 'Es casi seguro que haya una solución que le permita separar JS de HTML . – lonesomeday

+0

No está realmente separado si el JS no funciona sin conocer la estructura y/o los ids del html. – nnnnnn

4

No hacerlo desde el valor "href", lo hace a partir de un atributo de controlador de eventos reales:

<a id='la' href='#' onclick='ko(event, this)'> 

Pass en el event para que pueda evitar que la interpretación por defecto de un clic en <a> de ser realizado por el navegador.

function ko(event, element) { 
    if ('preventDefault' in event) event.preventDefault(); 
    event.returnValue = false; // for IE 

    // here "element" will refer to the clicked-on element ... 
} 
+0

Obtengo el mismo resultado que obtenía originalmente. "indefinido!" – DKean

+0

Lo siento, ampliaré la respuesta; esto realmente debería funcionar sin embargo. – Pointy

+0

pruébalo y avísame si obtienes un resultado diferente ... – DKean

Cuestiones relacionadas