2010-08-21 21 views
56
$('#myTable').click(function(e) { 
    var clicked = $(e.target); 
    clicked.css('background', 'red'); 
}); 

Puede alguien explicar esto a mí, y explicar por qué es necesaria e, y lo que realmente hace ..jquery/javascript: function (e) {.... ¿qué es e? ¿Por qué es necesario? ¿Qué es lo que realmente hace/logra?

+1

Parece que necesitamos una respuesta que explique cómo la función anónima logra un valor para 'e'. Esto estaría fuera de jQuery, pero una respuesta específica de JavaScript. – knownasilya

Respuesta

63

Usando e es solo una abreviatura de event. Puede pasar cualquier nombre de variable que desee.

// would work just the same 
$('#myTable').click(function(anyothername) { 
    var clicked = $(anyothername.target); 
}); 

Puedes ver más en jQuery's handling of events.

+9

También vale la pena señalar que esto no es específico solo para jQuery, sino también para eventos nativos en javascript. – balupton

+2

ah, no sabía que era solo una variable ... entonces, ¿cuál es el propósito de esa variable si no la estoy usando en ningún otro lado en mi script sino en esos 2 lugares? no entiendo lo que contiene ... ¿qué le dice la información? –

+2

@ android.nick aunque no puede usarlo explícitamente jQuery lo necesita. Imagine el escenario de 'clic'. jQuery necesita saber la acción realizada y el elemento sobre el que se realizó la acción. Entonces, incluso si no está usando la variable, se usa internamente. Pero puede llamar a '$ ('# myTable'). Haga clic en (function() {...});' igual de bien. – Frankie

6

Es el parámetro formal de la función. jQuery pasará un objeto de evento cuando se llame a la función. Esto se usa para determinar el objetivo. Como se señala en el documentation, jQuery siempre pasará un objeto de evento incluso cuando el navegador (por ejemplo, IE) no lo haga.

En este caso, el objetivo le indica en qué elemento se hizo clic originalmente.

10

Uno de los beneficios de tener e (el objeto que generó el evento) le permite evitar la propagación de comportamientos predeterminados para ciertos elementos. Por ejemplo:

<a id="navLink" href="http://mysite/someOtherPage.htm">Click For Info</a> 

muestra un enlace en el que el usuario puede hacer clic. Si un usuario tiene JavaScript desactivado (¿por qué? No lo sé), quiere que el usuario navegue a alguna otra página.htm cuando hace clic en el enlace. Pero si tienen JavaScript habilitado, entonces desea mostrar un diálogo modal y no navegar fuera de la página. Se podría manejar esta impidiendo que el comportamiento por defecto del anclaje/enlace y mostrar el modal como tal:

$("#navLink").click(function(e) { 
    e.preventDefault(); //this prevents the user from navigating to the someOtherPage.htm 
    $("#hiddenDiv").dialog({ 
    //options 
    }); //show the dialog 
}); 

Así que tener ese parámetro disponible le permite, entre otras cosas descritas en otras respuestas, prevenir el comportamiento predeterminado de el elemento seleccionado.

Espero que esto ayude!

+0

Estoy tratando de entender la misma pregunta, por lo que es algo así como "esto" porque se refiere, a sí mismo, sin e el objetivo de devolución de llamada de función no podría adjuntarse a #mytable? –

8

Estoy hablando en teoría en cuanto a No soy un experto, pero he conseguido el resultado deseado mediante el uso de que el pequeño (e), que no tiene por qué ser un e lol

lo he descubierto. Es una manera de pasar el mismo evento de una función a otra.

En términos más simples. Quería que la navegación de la página fuera una función de desplazamiento elástico, sin embargo, quería que la página navegara "y" quería que se pudiera hacer clic en la misma navegación en determinadas condiciones. También quería la misma navegación dinámica desde otros eventos de clic que no eran enlaces. Para mantener el objetivo actual y seguir usando la función de navegación, tuve que configurar el pequeño (e) porque jQuery perderá el alcance de $ (this) como el mismo objetivo de la función lol. Aquí hay un ejemplo rápido.

function navigate_to_page(e){ 
var target = $(e.currentTarget).attr('href'); //--This is the same as $(this) but more static to bring out of it's scope 
    $('html, body').animate({ 
    'scrollTop':$(target).offset().top-0, 
    'scrollLeft': $(target).offset().left-$(window).width()*0.0}, 2000, 'easeOutBounce'); 
} 

no deje que la jerga te confunda. Es solo una simple animación de desplazamiento de página. Lo que debe tener en cuenta es e.currentTarget. e es nuestra variable y currentTarget es un jQuery equivalente a $ (esto) por lo que las juntas son una función Globular $ (this). Ahora me llaman por otra función con condistions al igual que

$('#myNavigationDiv a').on('mouseenter', function(e){ 
    if($(myCondition) === true){ 
     return false; 
     }else{ 
     navigate_to_page(e); 
     } 
    }); 

Vea cómo el pequeño (e) unido todo junto?

Ahora puede sustituir (e) a (whateveryouwant). Al invocar e en ambas funciones, coincidió con e .Torrent actual y puede aplicar esto a cualquier función específica detallada que necesite y ahorrarse LITERALMENTE las páginas del código lol

+1

Vota abajo porque utilizó la palabra 'LOL' tres veces. ¡Crecer! Ni siquiera está usando la palabra en áreas que son divertidas. Si pudiera votar abajo 10 veces lo hubiera hecho. – TheCarver

+1

@TheCarver ¿Bajó la votación porque usó LOL aunque la respuesta fue buena? Sí, has crecido porque los adultos señalan cosas "infantiles" mientras ignoran el punto principal. – Snorlax

+0

@Snorlax - ¿Quién dijo que era un adulto? Simplemente no escribo infantilmente en un sitio web serio que necesita respuestas en inglés bien redactadas para que entiendan nuestros amigos internacionales. LOL es argot y no todos entienden jerga. También significa que no hay más países de los que significa algo, y usarlo en lugares que no son divertidos no tiene sentido si me preguntas. Puedo rechazar mi voto si creo que la pregunta se ha escrito mal: revise las reglas. – TheCarver