qTip2 y atlas ajax (o simplemente actualización parcial general de ajax) causan qTips huérfanos
Frecuentes
Visto 451 equipos
0
Un poco largo, pero tengan paciencia conmigo:
asp.net updatepanel formulario adjunto con muchos qTip2, algunos basados en ajax y otros no.
Entonces, si paso el cursor por un qTip2 inmediatamente después de causar la devolución de datos (que activa la actualización asíncrona y la actualización), el javascript en qtip comienza a activarse y, al regresar, crea el qtip, pero debido a que el elemento que originó el evento ya no existe, el qip simplemente permanece abierto (display:block ) y aparece en la parte superior izquierda del documento (supongo que algún código intenta resolver .position pero el elemento ya no tiene ninguna).
Puede ver el error aquí: http://www.matclad.co.uk/brick-slip-blends.aspx
Intente, por ejemplo, hacer clic en un diseño y, tan pronto como lo haya hecho, muévase sobre uno hacia la izquierda o hacia la derecha. El qTip simplemente permanecerá allí. También puede hacerlo al agregar ladrillos, aunque eso es más difícil de cronometrar.
El código que está creando el qTip es:
// función recortada por brevedad
var els = $('div.pallet li.item .photo > input, div.lower li.chosen-item .photo > input');
els.click(function(){els.each(function(){$(this).qtip('destroy')});})
$('div.pallet li.item .photo > input, div.lower li.chosen-item .photo > input')
.each(function(){
var id = $(this).parent().attr('rel');
$(this).qtip({
content: { text:'Loading...',
ajax: { contentType: 'application/json; charset=utf-8',
dataType: 'json',
url: '/brick-slip-blends.aspx/GetDataForSlip',
data: '{Id:' + id + '}', type: 'POST',
beforeSend: function(jqXHR, settings){
return !Sys.WebForms.PageRequestManager.getInstance().get_isInAsyncPostBack();
},
success: function(data, status){
this.set('content.text', data.d);
},
complete: function(){}
}
},
hide: { event: 'click mouseout' },
show: { delay: 500 }
});
});
$('.qt').click(function(){$(this).qtip('destroy');});
$('.qt').qtip();
tenga en cuenta que al tratar de solucionar este problema, estoy destruyendo otros qtips en el selector al hacer clic, pero esto no funciona completamente (aunque lo solucionó parcialmente) y también he estado tratando de hacer algunas cosas en los métodos PageRequestManager (atlas ajax API)
¿Qué tipo de estrategia debo usar para sortear este problema? ¿Posible problema de cola ajax? interruptor global para cancelar la creación (en una función pasada a qtip)?
Ayuda por favor he estado luchando con esto y cualquier ayuda sería apreciada.
Saludos,
1 Respuestas
0
De acuerdo, tomé una fuerza bruta y destruí el qtip. Anoté en mi propio código que solo estaba:
$('.qt').click(function(){$(this).qtip('destroy');});
que acabo de mover a la parte superior destruir es decir
var els = $('div.pallet li.item .photo > input, div.lower li.chosen-item .photo > input, .qt');
No estaba iterando todos los demás .qt y destruyéndolos. SIN EMBARGO...
No creo que esto resuelva completamente el problema y sin duda volveré.
Respondido el 12 de junio de 12 a las 23:06