Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Gente ajuda com função jquery modal + ajax...
Ocorre o seguinte:
Listo via Do While varios itens
Cada em cada item possui link para carregar modal com informações do item clicado ( via passagem do atributo id...
Quando carregado à tela pela primeira vez. O link funciona corretamente.
Daí começa os problemas... Porque a cada 10 ou 15 segundos... Faço nova chamada (ajax) para atualizar a lista...
Daí o link que chama o modal deixa de funcionar..
Então testei uma função normal. Digo: não jquery. Ao clicar no link a função é chamada.
1º) Gostaria de saber se teria como chamar mesma função sem usar o comando:
> $('a[name=modalCobX]').click(function(e) ...
- Ou seja, chamar a janela modal com se fosse uma função, só que dentro do "$(document).ready(function() {.."
2º Pesquisando alternativas, percebi que se o comando for chamando com o arranjo abaixo:
$('a[name=modalCob]').live("click",function(e) {....
Funciona no Firefox mais funciona no I.E. - a principio. Abre a mascara mais não abre as divs...
Motivo: Acredito que o id da referencia não é identificado no I.E.
Dando alert($(this).attr('href')) percebo que no FF vem: #modalCobX já no I.E vem a url completa (http:www.site.com.bre/.../#modalCobX)
Agradeço qualquer ajuda de como solucionar a questão.
Abaixo função JQuery
>
$(document).ready(function() {
$('a[name=modalCobX]').click(function(e) {
$('html, body').animate({ scrollTop: 0 }, 0);
e.preventDefault();
var id = $(this).attr('href');
var idXis = $(this).attr('id');
var maskHeight = $(document).height();
var maskWidth = $(window).width();
$('#mascara').css({'width':maskWidth,'height':maskHeight});
$('#mascara').fadeIn(1000);
$('#mascara').fadeTo("slow",0.8);
//Get the window height and width
var winH = $(window).height();
var winW = $(window).width();
$(id).css('top', winH/2-$(id).height()/2);
$(id).css('left', winW/2-$(id).width()/2);
$('#ExibeCob').html("Aguarde...");
var timeStamp = Number(new Date()); //Date.now();
var printCall = function () {
$.ajax({
///processamento por ajax
});
};
$(id).fadeIn(2000);
});
});
Chamada: link por jquery
<a href="#dialog1" name="modalCobX" id="<?=$id?>"><img src='btAlterar.gif' border='0' title='Editar Dados'></a>
Chamada: exemplo sem jquery( a princípio)
<a href="#" onclick='chamaOi(<?=$id?>)'><img src='btAlterar.gif' border='0' title='Editar Dados'></a>
Function chamaOi(id){
Alert(oi _id)
} Valeu!
Willian, obrigado por responder.
Verifiquei sua dica... Havia achado sobre o ".live"... Tanto é que apliquei o método.
Mais no ie 8 a referencia ou melhor o atributo não é passado como no FF.
Por isso perguntei se alguma outra forma de chamar o evento ou por função.
Se DOM não enxerga o elemento e, também considerando situações mais simples... Digo: ajax por “XMLHttpRequest”... (sem Jquery – a princípio).
Se trazia um outro input na tela via XMLHttpReques que não havia na página...
Ao varrer todos os elementos da tela novamente (por “for” ou “While”) geralmente consigo recuperar o novo elemento...
Não se me fiz entender e, também são sei se é a melhor forma...
Mais resolvi algumas questões assim.
Daria pra fazer semelhante no JQuery?
Gente a ideia de percorrer os elementos não rolou.
Considerando que o efeito da mascará é acionado...
tenteis assim assim :
$("div").each(function(i){
$('#ExibeCob').html("Aguarde...");
});
O IE8 não pegou... Inclusive ficou mais lento já que está listando tudo que é div...
É... O problema é " id = $(this).attr('href') " mesmo!
Uff!
qual versão do jQuery vc tá usando ?
o live resolve o seu problema, mas ele foi removido no jQuery 1.9+, se vc estiver usando essas versões vc precisa fazer um delegate com o método on, ai ficaria assim:
$('#elemento_pai_do_a_modal').on('click', 'a[name=modalCobX]', (function(e) {
Willian,
Por incrível ou “ridículo” que parece simplesmente cortei e tratei a string do atributo pegado o nome do mesmo.
Funcionou no I.E...
//#modalCobX
n = $(this).attr('href');
if(n.length > 10){
teste = n.substring(n.length - 10);
id = teste
}else{
id = $(this).attr('href');
}
//alert(id +"\n"+ teste)
Inclusive o 2º atributo: idXis = $(this).attr('id')
Pelo que estou entendendo... Da teoria que os elementos não existiam ainda.
Então DOM já os enxergava...
E quanto ao 2ª atributo? Deveria ou não deveria carregar?
Para o meu conhecimento de aprendiz... (Perto de você William)
Isso é estranho e confuso.
Mais o legal da profissão é o desafio (e a insistência). Né?
PS: JQuery bem antigo... Nem sei direito acho que 1.3 se não me engano.
leia:
http://wbruno.com.br/2011/03/18/metodo-live-jquery/