2011-01-05 13 views
17

¿Por qué es la siguiente no funciona:los sucesos de conmutación en la ventana primaria de marco flotante

//iframe: 
window.parent.$(document).trigger('complete'); 

//parent window: 
$(document).bind('complete', function(){ 
    alert('Complete'); 
}); 

mientras que el siguiente es trabajar:

//iframe: 
window.parent.$('body').trigger('complete'); 

//parent window: 
$('body').bind('complete', function(){ 
    alert('Complete'); 
}); 

?

+0

Posible duplicado de [evento de clic de activación en la ventana primaria de iframe] (http://stackoverflow.com/questions/3521947/trigger-click-event-in-iframe-parent-window) –

Respuesta

36

La forma en que se rastrean los eventos, solo puede activar o recibir eventos en el mismo documento.

tratar

window.parent.$(window.parent.document).trigger('complete'); 
+0

Tengo esencialmente el mismo problema con YUI3, algún consejo? – danjah

+0

@Danjah Nunca antes había usado YUI, así que no estoy seguro de poder ayudarlo. Sin embargo, es muy posible que se pueda usar un enfoque similar: window.parent.YUI.use ('node-event-simulate', function (Y) {Y.one (window.parent.document) .simulate ('click ');}); Sin embargo, es posible que desee exponer un método en el padre para realizar el desencadenamiento requerido en nombre de su iframe, siguiendo la sugerencia de @Ken Redler a continuación. – HackedByChinese

+0

Muy bien, muchas gracias. Definitivamente daré un buen golpe, tuve un poco de cuidado al comenzar a simular eventos antes de tratar de desencadenar controladores existentes ... pero es posible que deba hacerlo. – danjah

10

Usted puede tratar de añadir una función de disparo en el documento principal, a continuación, llamándolo como función regular del marco flotante. Esto debería asegurar que estás desencadenando el evento en el contexto correcto del documento.

// In Parent 
function triggerComplete() { 
    $(document).trigger('complete'); 
} 

// In iFrame 
window.parent.triggerComplete(); 
-5

cheque esta solución, es muy complicado

top.frames [ 'frame_name'] document.getElementById ('tratamiento') style.display = 'none'..;

Cuestiones relacionadas