|
||
|
|
|
Avaliação:
![]() ![]() ![]() ![]() | Publicado em: 17/08/2007Sobrescrevendo função Alert do Javascript
Luciano Bianchi é desenvolvedor Java, trabalha com desenvolvimento de sistemas pra web há mais de 4 anos, onde já atuou em grandes empresas como o Banco do Brasil, desenvolvendo no centro de tecnologia.
Satisfação,
preparei este artigo pois agora com as possibilidades da web 2.0 e a mais nova moda da internet, o AJAX, vemos várias aplicações utilizando componentes UI que bloqueiam o browser e exibem determinada mensagem na tela. Uma outra alternativa para se fazer isso, seria sobrescrever a função alert do javascript, podendo personalizar a janela da forma que desejar, pois o grande problema de se utilizar vários alerts em uma aplicação web moderna é o design ultrapassado e sem recursos do alert. Para tal tarefa utilizaremos o plugin jQuery, um component Ajax muito poderoso que se encontra disponível no site http://docs.jquery.com/Plugins O javascript jquery.js é a base dos outros componentes, sem ele não funciona, e para a tarefa específica de sobrescrever o alert utilizaremos o jqModal.js, também disponível no site e em anexo neste artigo. Mãos a obra, vamos criar um javascript chamado dialog.js, e nele vamos utilizar os componentes disponíveis no jqModal para sobrescrever as funções de alert e também de confirm do javascript, o código desse js ficará assim: function invocaDialog(){ $('#alert').jqm({ overlay: 60, overlayClass: 'overlay', modal: true, trigger: false }); $('#confirm').jqm({ overlay: 60, overlayClass: 'overlay', modal: true, trigger: false }); confirm("Deseja ler o restante do arquivo?", "index.html"); //alert("Alerta em JavaScript"); } function alert(msg) { $('#alert') .jqmShow() .find('div.jqmAlertContent') .html("<span>" + msg + "</span>") .end() .find(':submit:visible') .click(function() { $('#alert').jqmHide(); }); } function confirm(msg,callback) { $('#confirm') .jqmShow() .find('p.jqmConfirmMsg') .html("<span>" + msg + "</span>") .end() .find(':submit:visible') .click(function(){ if(this.value == 'Sim') (typeof callback == 'string') ? window.location.href = callback : callback; $('#confirm').jqmHide(); }); } As functions alert e confirm, são responsáveis por sobrescrever elas mesmas, repare que existe uma diferença apenas entre elas, a função confirm recebe um parâmetro a mais "callback", este parâmetro é a página que deverá ser redirecionada caso o usuário clique na opção "SIM" do confirm. A função invocaDialog, será a função chamada para a exibição do alert ou confirm, essa função configura alguns parâmetros para a exibição personalizada, e ao final dela existem duas chamadas, essas chamadas com certeza vocês já conhecem, são as básicas para alert e confirm, basta passar qual você quer sobrescrever, eu coloquei as duas para mostrar, porém o confirm está comentado, pois não tem muita lógica chamar um alert e um confirm juntos, em alguns casos pode até ser útil. Agora vamos para onde a mágica acontece, até aqui tudo muito simples, devemos agora somente personalizar nosso alert, e para isso configuramos o arquivo CSS chamado estilo.css, nele personalizamos todo o alert, para tal deve-se ter uma noção básica de CSS, o nome dos estilos ajudam na identificação do que será renderizado, então basta mudar para o padrão desejado. Podemos inclusive incluir imagens para personalização, podemos fazer qualquer configuração suportada pelo CSS, um exemplo segue abaixo: div.jqmAlert .jqmClose, div.jqmConfirm .jqmClose { width:20px; height:20px; display:block; float:right; clear:right; background:transparent url(sair.gif) 0 0 no-repeat; } Como o nome já sugere, esse estilo é responsável por fechar o alert, nele incluí umagem de fundo, na linha: background:transparent url(sair.gif) 0 0 no-repeat; A imagem utilizada está nos anexos do arquivo. Para finalizar o tutorial devemos chamar a nova função alert ou confirm a partir da página HTML ou JSP, então utilizamos as seguintes divs, que ficarão escondidas através da configuração no CSS, e só serão exibidas ao chamar a função. <!-- Alert Dialog --> <div class="jqmAlert" id="alert"> <div class="jqmAlertWindow"> <div class="jqmAlertTitle clearfix"> <a href="#" class="jqmClose"><em>Fechar</em></a> <h1>Alert Personalizado em JavaScript</h1> </div> <div class="jqmAlertContent"></div> <input type="submit" value="Ok" /> </div> </div> <!-- Confirm Dialog --> <div class="jqmConfirm" id="confirm"> <div class="jqmConfirmWindow"> <div class="jqmConfirmTitle clearfix"> <a href="#" class="jqmClose"><em>Fechar</em></a> <h1>Confirm Personalizado em JavaScript</h1> </div> <div class="jqmConfirmContent"> <p class="jqmConfirmMsg"></p> </div> <input type="submit" value="Não" /> <input type="submit" value="Sim" /> </div> </div> Esse código pode ficar dentro das tags <body></body> Para chamar a função eu coloquei um link sem caminho, que chama apenas a função invocaDialog(); como descrito abaixo: <a href="#" onclick="invocaDialog()">Chamar Função</a> Não podemos esquecer também de incluir os js e o css na página, para tal dentro das tags <head></head> incluímos o código: <link href="estilo.css" rel="stylesheet" type="text/css" /> <script type="text/javascript" src="jquery.js"></script> <script type="text/javascript" src="jqModal.js"></script> <script type="text/javascript" src="dialog.js"></script> Abaixo segue a imagem do meu alert personalizado O código foi testado nos browsers Firefox e IE, em ambos funciona perfeitamente. Espero que tenham gostado do tutorial e que seja útil, qualquer dúvida entrem em contato. A - AKAHAI L - LÔKAHI O - OLU’OLU H - HA’AHA’A A - AHONUI Luciano Bianchi Arquivos anexos ao artigo
Links relacionados
Eduardo Stuart <eduardo@eduardostuart.com>
bem explicado
muito bom , parabéns ;) http://blog.eduardostuart.com ![]() ![]() ![]() ![]() ![]() Derick <derick_cp@yahoo.com.br>
ele nao funciono aki nao ele da erro no jQuery.js.
. close:function(s){var h=hashs;h.a=false; if(ma.length != 0){ma.pop();if(ma.length == 0)mf('unbind');} if(h.c.onHide)h.c.onHide(h);else{h.w.hide();if(h.o)h.o.remove();} return false; }}; var s=0,hash={},ma=,ie6=.browser.msie && typeof XMLHttpRequest == 'function', i=('<iframe class="jqm"></iframe>').css({opacity:0}), f=function(h){if(ie6)if(h.o)h.o.html('<p style="width:100%;height:100%"/>').prepend(i);else if(('iframe.jqm',h.w).length == 0)h.w.prepend(i); h.f=(':input:visible',h.w)0h.w0;h.f.focus();}, mf=function(t){()t("keypress",m)t("keydown",m)t("mousedown",m);}, m=function(e) {var h=hashmama.length-1, r=(!(e.target).parents('.jqmID'h.s).length == 0);if(!r)h.f.focus();return r;}, hs=function(w,e,y){var s=;w.each(function(){s.push(this._jqm)}); (e).each(function(){if(thisy).extend(thisy,s);else{thisy=s;(this).click(function(){for(var i in {jqmShow:1,jqmHide:1})for(var s in thisi)if(hashthisis)hashthisis.wi(this);return false;});}});}; })(jQuery); <-- nessa linha . fala que jQuery nao foi definida e sim eu importei ela na jsp. se mesmo assim tento executar . ele da erro no alert function invocaDialog(){ ('#alert').jqm({ overlay: 60, overlayClass: 'overlay', modal: true, trigger: false da erro na trigger: false ele fala que ("#alert").jqm is not a function ![]() ![]() ![]() ![]() ![]() Luciano <lucianobianchidf@gmail.com>
Derick,
manda os fontes para o meu email do jeito que ta aí, que dou uma olhada, pois é algum erro de importação ou chamada. Abraços! : Não avaliado Rita Staley <trinity.134@gmail.com>
Oi Luciano, achei muito bom teu artigo, apesar de estar iniciando em programação...preciso d mais informações a respeito. Aguardo teu contato c/ o propósito de tirar duvidas.
Um abraço! ![]() ![]() ![]() ![]() ![]() Ezequiel <elgodoy@gmail.com>
Fera, tentei chamar a função alert aqui , mas não consegui.
Podes me dar uma mão? ![]() ![]() ![]() ![]() ![]() Luciano <lucianobianchidf@gmail.com>
Olá Ezequiel,
passa o erro que está ocorrendo, ou me manda um e-mail com seus fontes que dou uma olhada e te repasso. Abraços!! : Não avaliado André Karkoski <drezao@gmail.com>
Excelente artigo, muito bem explicado, funcionou de prima.
Parabéns ![]() ![]() ![]() ![]() ![]() Sipmann
boa cara.... belo tuto... eu soh dei uma modificada para ficar um poco mais dinamico... adicionei uma variavel para onde eu quero que o confirm vá!
VLW e belo tuto!!!! ![]() ![]() ![]() ![]() ![]() Kleyton <kleytonbarcelos@gmail.com>
parabéns
![]() ![]() ![]() ![]() ![]() Marcelo Ferreira <marcelodiegues@bol.com.br>
Luciano estou com problemas. O codigo no firefox funciono blz, mas no ie a div do alert ficou por baixo do background e nao consigo clicar nela. Gostaria de saber se vc tem alguma solucao
![]() ![]() ![]() ![]() ![]() Luciano <lucianobianchidf@gmail.com>
Me manda o seu código para eu dar uma olhada. : Não avaliado
Rafael <rafaunit2003@yahoo.com.br>
Cara blz, valeu a tentativa, porém o que voce fez não foi um alert não. Foi apenas chamar um div bloqueado. E que gastou milhoes de coisas para fazer
![]() ![]() ![]() ![]() ![]() Rafael <rafaunit2003@yahoo.com.br>
Cara, cade o alert funcionando, você so colocou um div chamando no meio da tela, e ainda o codigo ficou gigante. cade o alert funcionando
![]() ![]() ![]() ![]() ![]() Luciano <lucianobianchidf@gmail.com>
Caro Rafael,
se você não conseguiu fazer funcionar seguindo os passos do artigo, deve ter algum erro no que você digitou, pois o pessoal acima conseguiu fazer direitinho... e para esclarecer, o alert do javascript É UMA DIV, então nós sobrescrevemos a função dando o mesmo nome, "alert", ou seja, essa função é a mesma que é chamada quando você invoca o alert do javascript na função alert() e passando o parametro para ele.. porém no meu exemplo, vc deve chamar a função invocaDialog() que é generica para o alert() e o confirm(), e nessa função vc define o que vc vai chamar e os parametros. Grato. : Não avaliado "a função confirm recebe um parâmetro a mais "callback", este parâmetro é a página que deverá ser redirecionada caso o usuário clique na opção "SIM" do confirm"
No es cierto que deba ser una página. El parámetro callback puede ser una cadena, la cual sí debería contener la dirección a una página web, o bien puede ser UNA FUNCIÓN CALLBACK. Si uno se lee el código, queda bastante claro: (typeof callback == 'string') ? window.location.href = callback : callback; El código anterior es equivalente a un IF - THEN - ELSE (en caso de que no conozcas el operador ternario). Es decir, puedes hacer que te dirija a una página web o hacer cualquier otra cosa que quieras en javascript pasándole la función callback que desees. ![]() ![]() ![]() ![]() ![]() ![]() |
|
|
|