Ir para conteúdo
Fórum Script Brasil
  • 0

Não consigo evitar comportamento padrão de hiperlink (evt)


eduardovalente

Pergunta

83kc.jpgdxwk.jpghw3d.jpgvez3.jpgimbh.jpgaaex.jpg

Bom dia. Estou seguindo um código de um livro e não estou conseguindo executar evt.preventDefault() para o hiperlink de uma imagem. Na sessão de depuração, o ponteiro do breakpoint sequer passa em cima dessa instrução e também não consigo executar link.blur(); para o elemento <a>.

index.html

<!DOCTYPE html>
<html>
    <head>
        <title>Galeria de Imagens</title>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <link href="princ.css" rel="stylesheet" type="text/css">
        <script type="text/javascript" src="galeria_lib.js"></script>
        <script type="text/javascript" src="galeria.js"></script>
    </head>
    <body>
        <div id="conteudo">
            <div id="header">  
                <h1>Galeria de Imagens de Livros</h1>
                <p>Clique num dos links abaixo para ver a imagem.</p>
            </div>
            <div id="nav"> 
                <ul id="lista_imagem">
                    <li><a href="img/gt1.jpg" title="guerra">A Guerra dos Tronos</a></li>
                    <li><a href="img/gt2.jpg" title="furia">A Fúria dos Reis</a></li>
                    <li><a href="img/gt3.jpg" title="tormenta">A Tormenta de Espadas</a></li>
                    <li><a href="img/gt4.jpg" title="festim">O Festim dos Corvos</a></li>
                    <li><a href="img/gt5.jpg" title="danca">A Dança dos Dragões</a></li>    
                </ul>    
            </div>      
            <p><img src="img/martell.jpg" alt="martell" title="martell" id="martell"></p>
            <p><span id="legenda"></span><br>
        </div>
    </body>
</html>

princ.css

/* 
    Document   : princ
    Created on : 08/08/2013, 21:01:38
    Author     : eduardo
    Description:
        Purpose of the stylesheet follows.
*/

body {

    font-family: Arial, Verdana, sans-serif;
    background: #FF9730;

}

#header h1, #header p {
    text-align: center;  
    color: #f71d1d;
}

#header p {
   width: 500px;
   margin: 10px auto;
}

#nav {
    margin: 40px 60px;
}

#nav li {
    display: inline;
    margin: 0px 5px;
    letter-spacing: 0.1em;
}

a:link {
    color: #666633;
    text-decoration: none;
}

a:visited {
    color: #894910;
}

a:hover {
    color: #891717;
    border: 1px solid #f71d1d;
    padding: 5px;
}

a:active {
    color: #fff600;
    border: 1px solid #fff600;
}

img[title="martell"] {

    display: block;
    width: 720px;
    height: 400px;
    margin: 50px auto;
    border: 4px solid #f71d1d;
}


galeria_lib.js

var I = function(id)
{
    return document.getElementById(id);
}

var T = function(nome)
{
    return document.getElementsByTagName(nome);
}

var N = function(nome)
{
    return document.getElementsByName(nome);
}

var GaleriaImagem = function(id_lista, id_imagem, id_legenda)
{
    var that = this;
    this.lista_imagem = I(id_lista);
    this.elem_imagem = I(id_imagem);
    this.legenda = I(id_legenda);

    this.validarElem(this.lista_imagem, "*", "ID da lista");
    this.validarElem(this.elem_imagem, "img", "ID da imagem");
    this.validarElem(this.legenda, "span", "ID da legenda");

    this.links_imagens = this.lista_imagem.getElementsByTagName("a");
    if (this.links_imagens.length == 0)
    {
      throw new Error("Galeria de Imagem: lista não contém elementos a");
    }
    
    var i, elem, imagem;
    this.cache_imagem = [];
    for(i = 0; i < this.links_imagens.length; i++)
    {
       elem = this.links_imagens[i];
       elem.onclick = function(evt)
       {
          var link = this;
          if(!evt)
           evt = window.event;
          
          that.click_link(evt, link);
       }
       
       imagem = new Image();
       imagem.src = elem.href;
       this.cache_imagem.push(imagem);
    }    
}    

GaleriaImagem.prototype.validarElem = function(elem, tag_nome, desc_elem)
{
   if(!elem)
   {
      throw new Error("Galeria de Imagens: " + desc_elem + " não encontrado.");  
   }
   
   if(elem.nodeType !== 1)
   {
      throw new Error("Galeria de Imagens: " + desc_elem + "Não é um id do elemento");  
   }    
   
   if(tag_nome !== "*" && elem.nodeName !== tag_nome.toUpperCase())
   {
      throw new Error("Galeria de Imagens: " + desc_elem + " não é uma " + tag_nome.toUpperCase() + " tag."); 
   }
}

GaleriaImagem.prototype.click_link = function(evt, link)
{
   this.elem_imagem.src = link.href;
   this.legenda.firstChild.nodeValue = link.title;
   link.blur();
   
   if(evt.preventDefault)
   {
      evt.preventDefault(); 
   }    
   else {
     evt.returnValue = false;
   }  
}

galeria.js

var galeria;

window.onload = function()
{
   galeria = new GaleriaImagem("lista_imagem", "martell", "legenda");
}
Editado por eduardovalente
Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...