Estoy tratando de encontrar el jQuery equivalente de este método de JavaScript llamada:

document.addEventListener('click', select_element, true);

He llegado tan lejos como:

$(document).click(select_element);

pero que no logra el mismo resultado, como el último parámetro del método JavaScript – un valor booleano que indica si el controlador de eventos se debe ejecutar en la captura o la fase de propagación (por mi entendimiento de http://www.quirksmode.org/js/events_advanced.html) – se ha dejado fuera.

¿Cómo se especifica el parámetro, o de lo contrario lograr la misma funcionalidad, el uso de jQuery?

  • Captura de eventos no es compatible con jQuery, como la captura de eventos no es compatible con IE, que jQuery soporta 😉 que estás buscando es decir la compatibilidad?
  • Gracias, la media luna Fresco – creo que tiene sentido ahora. Necesito IE de compatibilidad, así que supongo que hay que olvidarse de la captura de fase.
InformationsquelleAutor Bungle | 2010-03-07

6 Comentarios

  1. 137

    No todos los navegadores soportan la captura de eventos (por ejemplo, las versiones de Internet Explorer menor que 9 no), pero todos admiten la propagación de los eventos, por lo que es la fase utilizan para enlazar a los controladores de eventos en todos los cross-browser abstracciones, jQuery incluido.

    La más cercana a lo que usted está buscando en jQuery es el uso de bind() (sustituida por en() en jQuery 1.7+) o el caso específico de métodos jQuery (en este caso, haga clic en(), que llama a bind() internamente de todos modos). Todo el uso de la fase de propagación de un elevado evento.

    • Gracias, Russ – esa es una buena explicación.
    • Se parece a IE9, finalmente, admite. blogs.msdn.com/b/ie/archive/2010/03/26/…
    • y por qué no apoyar la captura de eventos ? ¿cuáles son las desventajas de la captura de eventos ?
    • Para que quede claro, estás diciendo que lo que el OP quiere no es posible — que tiene el uso de la propagación, y no se puede utilizar la captura. A la derecha?
  2. 111

    Como de jQuery 1.7, .on() es ahora el método preferido de los eventos de unión, en lugar de .bind():

    De http://api.jquery.com/bind/:

    Como de jQuery 1.7, el .en (), el método es el método preferido para
    asociar controladores de eventos a un documento. Para versiones anteriores, el
    .método bind() se utiliza para conectar un controlador de eventos directamente a
    elementos. Los controladores están conectados a la actualidad, los elementos seleccionados en
    el objeto jQuery, por lo que los elementos que deben existir en el punto de la llamada
    a .bind() se produce. Para obtener más flexible de enlace de evento, ver la discusión
    de evento delegación en .en la() o .delegado().

    La página de documentación se encuentra en
    http://api.jquery.com/on/

  3. 14

    Una cosa a tener en cuenta es que los eventos de jQuery métodos no fuego/trampa load en embed etiquetas que contienen SVG DOM que se carga como un documento separado en el embed etiqueta. La única manera que he encontrado para atrapar a un load evento en que estos eran para su uso en crudo, JavaScript.

    Esto no funciona (he probado on/bind/load métodos):

    $img.on('load', function () {
        console.log('FOO!');
    });

    Sin embargo, esto funciona:

    $img[0].addEventListener('load', function () {
        console.log('FOO!');
    }, false);
    • cabe señalar que esta es la manera correcta si usted tiene la intención de no sobrescribir cualquier otro vinculado a los controladores de eventos para el elemento(s).
    • ¿cuál es la $img?
  4. 12

    Ahora deberá utilizar el .on() función para enlazar eventos.

  5. 1

    Aquí es un excelente tratamiento en el Mozilla Red de Desarrollo (MDN) de este problema para el estándar de JavaScript (si usted no desea depender de jQuery o que se entienda mejor, en general):

    https://developer.mozilla.org/en-US/docs/DOM/element.addEventListener

    Aquí hay una discusión de flujo de eventos de un enlace en el anterior tratamiento:

    http://www.w3.org/TR/DOM-Level-3-Events/#event-flow

    Algunos puntos clave son:

    • Se permite la adición de más de un controlador para un evento
    • Le da un control más fino de la fase cuando el detector se activa (la captura del frente de propagación)
    • Funciona en cualquier elemento de DOM, no sólo de los elementos HTML
    • El valor de «este» pasan a caso no es el objeto global (ventana), pero el elemento desde el que el elemento es despedido. Esto es muy conveniente.
    • Código legado es decir de los navegadores es simple y se incluye bajo el título «el Legado de Internet Explorer y attachEvent»
    • Puede incluir parámetros si encierra el controlador en una función anónima

Dejar respuesta

Please enter your comment!
Please enter your name here