El mecanismo jQuery ".triggerHandler()", a diferencia de ".trigger()", solo opera en el primer elemento al que hace referencia el Objeto jQuery para el que se llama. En otras palabras,jQuery ".triggerHandler()" vs. ".trigger()" cuando se seleccionan múltiples elementos
$('.all-over-the-page').triggerHandler("readjust");
sólo se llamará al manejador de "reajustar" para el primer elemento con la clase "all-over-the-página", incluso si hay muchos elementos de la página con esa clase. El método ".trigger()", por otro lado, los afectaría a todos.
Me doy cuenta de que puedo usar ".each()" para evitar esto (o simplemente escribir mi propio sustituto que hace eso por mí), pero ¿hay alguna razón por la cual los dos son diferentes a este respecto? No tiene sentido para mí. (Entiendo por supuesto que es casi seguro que no se puede cambiar ahora.)
edición aclarar:
Es probable que sea más fácil de entender por qué estoy rascándome la cabeza sobre esto si proporciono un contexto en el estilo de código que en realidad tengo. Cuando configuro código para varias características de "widget" en una página, eso a menudo implica manejadores de eventos. Un buen ejemplo es una forma de algún tipo que tiene algunos campos cuya relevancia está controlada por una casilla de verificación, un botón de opción o un selector. Una instancia común de esto es la casilla "Dirección de envío" que aparece en un trillón de sitios de comercio electrónico: si la casilla de verificación está marcada, la dirección de envío está deshabilitada y se utiliza la dirección de facturación.
Considere que algunos otros códigos pueden, por sus propios motivos, que son totalmente independientes del widget de control de casilla de verificación, hacer cosas en el formulario que pueden incluir la actualización de la configuración de la casilla de verificación mediante programación. En ese caso, ese otro código de widgets puede querer usar "triggerHandler()" para indicarle a los widgets, "oye, he actualizado algunas cosas, por lo que es posible que desee volver a verificar el estado actual y ajustarlo si es necesario".
Por lo tanto, si ".triggerHandler()" operaría sobre todos los elementos seleccionados, podría usar:
$theForm.find('input, select, textarea').triggerHandler('change');
y todos esos manipuladores podía correr y hacer todo lo que necesitan. Como ya he dicho, es bastante fácil de escribir: "? ... ¿Hay alguna razón por la cual los dos son diferentes a este respecto"
$theForm.find('input, select, textarea').each(function() {
$(this).triggerHandler('change');
});
+1 buena pregunta Pointy –
No estoy seguro de qué está tratando de hacer específicamente aquí. ¿Puedes dar un poco más de contexto de lo que intentas resolver? –
Actualizado con más material explicativo. – Pointy