event español javascript events cross-browser scriptaculous

español - event listener javascript



Crossbrowser equivalente del parámetro de evento explicitOriginalTarget (6)

No hay equivalente a explicitOriginalTarget en ninguno de los navegadores que no sean Gecko. En Gecko, esta es una propiedad interna y no se supone que deba ser utilizada por un desarrollador de aplicaciones (tal vez por escritores vinculantes de XBL).

¿Alguien sabe de crossbrowser equivalente del parámetro de evento explicitOriginalTarget? Este parámetro es específico de Mozilla y me da el elemento que causó el desenfoque. Digamos que tengo una entrada de texto y un enlace en mi página. La entrada de texto tiene el foco. Si hago clic en el enlace, el evento de desenfoque de la entrada de texto me da el elemento de enlace en Firefox a través del parámetro explicitOriginalTarget.

Extiendo el método Autocompleter.Base onBlur para que no se oculten los resultados de la búsqueda cuando el campo de búsqueda pierde el foco en determinados elementos. Por defecto, el método onBlur se oculta si el campo de búsqueda pierde el foco en cualquier elemento.

Autocompleter.Base.prototype.onBlur = Autocompleter.Base.prototype.onBlur.wrap( function(origfunc, ev) { var newTargetElement = (ev.explicitOriginalTarget.nodeType == 3 ? ev.explicitOriginalTarget.parentNode: ev.explicitOriginalTarget); // FIX: This works only in firefox because of event''s explicitOriginalTarget property var callOriginalFunction = true; for (i = 0; i < obj.options.validEventElements.length; i++) { if ($(obj.options.validEventElements[i])) { if (newTargetElement.descendantOf($(obj.options.validEventElements[i])) == true || newTargetElement == $(obj.options.validEventElements[i])) { callOriginalFunction = false; break; } } } if (callOriginalFunction) { return origFunc(ev); } } ); new Ajax.Autocompleter("search-field", "search-results", ''getresults.php'', { validEventElements: [''search-field'',''result-count''] });

Gracias.


Parece que está más diseñado para escritores de extensión que para diseño web ...

Vería los eventos de desenfoque / enfoque en ambos objetivos (o posibles) y compartiría su información.
La implementación exacta puede depender del propósito, en realidad.


El equivalente aproximado para .explicitOriginalTarget de Mozilla en IE es document.activeElement. Digo el equivalente aproximado porque a veces devolverá un nivel ligeramente diferente en el árbol de nodos DOM dependiendo de su circunstancia, pero sigue siendo una herramienta útil. Lamentablemente, sigo buscando un equivalente de Google Chrome.


Para IE, puede usar srcElement y srcElement .

if( !selectTag.explicitOriginalTarget ) selectTag.explicitOriginalTarget = selectTag.srcElement;


IE srcElement no contiene el mismo elemento que FF explicitOriginalTarget . Es fácil ver esto: si tiene un campo de botón con la acción onClick y un campo de texto con la acción onChange , cambie el campo de texto y mueva el cursor directamente al botón y haga clic en él. En ese punto, IE srcElement será el campo de texto, pero explicitOriginalTarget será el campo del botón. Para IE, puede obtener las coordenadas x, y del clic del mouse desde las propiedades event.x y event.y .

Desafortunadamente, el navegador Chrome no proporciona ni las coordenadas explicitOriginalTarget ni el mouse para el clic. Te dejan en tus propios dispositivos para descubrir de dónde se onChange evento onChange . Para hacer esto, el uso juicioso de mousemove y mouseout events puede proporcionar el seguimiento del mouse que luego se puede inspeccionar en el controlador onChange .


Actualización 2015 ... puede usar event.relatedTarget en Chrome. Tal cosa básica, con suerte los otros navegadores seguirán ...