Una vez más quiero cargar una página que contiene su propio script en un div usando $ ("divid"). Load (...). El problema que enfrento está relacionado con los eventos. Digamos que disparamos ("mono") desde la página principal y en la página cargada vinculamos ("mono") y hacemos una alerta ("mono obligado"). Si se llama al mismo método de carga varias veces, el enlace se llama varias veces. Ahora podría desvincularlo antes de vincularlo, o verificar el número de manejadores antes del enlace y luego no vincularlo para evitar esto. Ninguna de las opciones es escalable, como qué pasa si más adelante quiero vincularme a ese desencadenador en otra "página secundaria" (una página cargada en un div).Modelo de evento JQuery y prevención de manipuladores duplicados
Lo que idealmente quiero hacer es verificar si el controlador que voy a agregar ya existe, pero aún así QUIERO usar manejadores anónimos ... (preguntando un poco sobre esa última solicitud, creo). Actualmente tengo una solución mediante el uso de métodos predefinidos/nombrados y luego verificar esto antes del enlace.
// Found this on StackOverflow
function getFunctionName(fn)
{
var rgx = /^function\s+([^\(\s]+)/
var matches = rgx.exec(fn.toString());
return matches ? matches[1] : "(anonymous)"
}
function HandlerExists(triggerName, handlerName) {
exists = false;
if ($(document).data('events') !== undefined) {
var event = $(document).data('events')[triggerName];
if(event !== undefined)
{
$.each(event, function(i, handler) {
alert(handlerName);
if (getFunctionName(handler) == handlerName) {
exists = true;
}
});
}
}
return exists;
}
Esta es una forma bastante burda de hacerlo, pero parece funcionar. Acabo de hacer lo siguiente antes del enlace de la siguiente manera:
if (!HandlerExists("test", "theMethod")) {
$(document).bind("test", theMethod);
}
¿Alguien tiene una solución más elegante? por ejemplo, ¿hay alguna forma de verificar que un script en particular esté cargado? así que podría usar getScript() para cargar el js desde la página secundaria en la primera carga, y luego simplemente no cargarlo en cargas posteriores (y solo disparar un disparador que sería manejado por el js preexistente) ..
posible duplicado de [jQuery impedir el funcionamiento duplicado asignado] (http://stackoverflow.com/questions/1558377/jquery-prevent-duplicate-function-assigned) –