O que significa “javascript: void (0)”?




7 Answers

Além da resposta técnica, javascript:void significa que o autor está fazendo errado.

Não há uma boa razão para usar um javascript: pseudo-URL (*). Na prática, isso causará confusão ou erros, caso alguém tente fazer coisas como 'link de marcador', 'link aberto em uma nova guia' e assim por diante. Isso acontece bastante agora que as pessoas se acostumaram a clicar no meio para uma nova guia: parece um link, você quer lê-lo em uma nova guia, mas não é um link real, e fornece resultados indesejados, como uma página em branco ou um erro de JS, quando clicados ao meio.

<a href="#"> é uma alternativa comum que pode ser menos ruim. No entanto, você deve lembrar-se de return false do seu manipulador de eventos onclick para impedir que o link seja seguido e rolar até a parte superior da página.

Em alguns casos, pode haver um lugar realmente útil para apontar o link. Por exemplo, se você tem um controle em que você pode clicar e abrir um <div id="foo"> oculto anteriormente, faz sentido usar <a href="#foo"> para vinculá-lo. Ou se houver uma maneira não JavaScript de fazer a mesma coisa (por exemplo, 'thispage.php? Show = foo' que define foo visível para começar), você pode vincular a isso.

Caso contrário, se um link apontar apenas para algum script, ele não será realmente um link e não deverá ser marcado como tal. A abordagem usual seria adicionar o onclick a um <span> , <div> ou um <a> sem um href e href -lo de alguma forma para deixar claro que você pode clicar nele. Isto é o que StackOverflow [fez no momento da escrita; agora usa href="#" ].

A desvantagem disso é que você perde o controle do teclado, já que você não pode tabular em um span / div / bare-a ou ativá-lo com espaço. Se isso é realmente uma desvantagem depende do tipo de ação que o elemento deve tomar. Você pode, com algum esforço, tentar imitar a interatividade do teclado, adicionando um tabIndex ao elemento e aguardando uma tecla de pressionamento de espaço. Mas nunca vai 100% reproduzir o comportamento real do navegador, até porque navegadores diferentes podem responder ao teclado de maneira diferente (para não mencionar os navegadores não-visuais).

Se você realmente quer um elemento que não é um link, mas que pode ser ativado normalmente pelo mouse ou teclado, o que você quer é um <button type="button"> (ou <input type="button"> é exatamente como bom, para conteúdos textuais simples). Você sempre pode usar o CSS para redimensioná-lo, de modo que ele se pareça mais com um link do que com um botão, se você quiser. Mas como se comporta como um botão, é assim que você deveria marcá-lo.

(*: na criação de sites, de qualquer forma. Obviamente, eles são úteis para bookmarklets. javascript: pseudo-URLs são uma bizarria conceitual: um localizador que não aponta para um local, mas chama código ativo dentro do local atual. Eles causaram grandes problemas de segurança para navegadores e aplicativos Web, e nunca deveriam ter sido inventados pelo Netscape.)

javascript void
<a href="javascript:void(0)" id="loginlink">login</a>

Já vi tantas href muitas vezes, mas não sei exatamente o que isso significa.




Há uma enorme diferença no comportamento de "#" vs javascript: void

"#" rola para o topo da página enquanto "javascript: void (0);" não.

Isso é muito importante se você estiver codificando páginas dinâmicas. o usuário não quer voltar ao topo só porque ele clicou em um link na página.




Você deve sempre ter um href em suas tags. Chamar uma função JavaScript que retorne 'indefinida' funcionará bem. Então, vai ligar para '#'.

Tags de âncora no Internet Explorer 6 sem um href não obtêm o a:hover aplicado.

Sim, é terrível e um pequeno crime contra a humanidade, mas o mesmo acontece com o Internet Explorer 6 em geral.

Eu espero que isso ajude.

O Internet Explorer 6 é na verdade um grande crime contra a humanidade.




O operador void avalia a expressão dada e depois retorna indefinida. Evita atualizar a página.




Para entender este conceito, deve-se primeiro entender o operador void em JavaScript.

A sintaxe para o operador void é: void «expr» que avalia expr e retorna indefinido.

Se você implementar void como uma função, terá a seguinte aparência:

function myVoid(expr) {
    return undefined;
}

Esse operador vazio tem um uso importante que é - descartando o resultado de uma expressão.

Em algumas situações, é importante retornar indefinido em oposição ao resultado de uma expressão. Então vazio pode ser usado para descartar esse resultado. Uma dessas situações envolve javascript: URLs, que devem ser evitadas para links, mas são úteis para bookmarklets. Quando você visita uma dessas URLs, muitos navegadores substituem o documento atual pelo resultado da avaliação do “conteúdo” das URLs, mas apenas se o resultado não for indefinido. Portanto, se você deseja abrir uma nova janela sem alterar o conteúdo exibido atualmente, faça o seguinte:

javascript:void window.open("http://example.com/")



Um link deve ter um destino HREF a ser especificado para permitir que ele seja um objeto de exibição utilizável.

A maioria dos navegadores não analisará JavaScript avançado em um

<A HREF="" 

tag como:

<A href="JavaScript:var elem = document.getElementById('foo');" 

porque a tag HREF na maioria dos navegadores não permite espaços em branco, ou converterá espaço em branco em% 20, o equivalente HEX de um ESPAÇO, o que torna seu JavaScript absolutamente inútil para o interpretador.

Portanto, se você quiser usar uma tag A HREF para executar JavaScript in-line, deverá especificar um valor válido para HREF FIRST que não seja muito complexo (não contenha espaço em branco) e forneça o JavaScript em uma tag de atributo de evento como OnClick , OnMouseOver, OnMouseOut, etc.

A resposta típica é fazer algo assim:

<A HREF="#" onclick="var elem = document.getElementById('foo');">Get the object</a>

Isso funciona bem, mas faz a página pular para o topo por causa do sinal de libra / hash diz para fazê-lo.

Apenas fornecer uma tag de sinal de libra / hash em uma tag A HREF realmente especifica a âncora de raiz, que é sempre, por padrão, a parte superior da página, você pode especificar um local diferente usando especificando o atributo NAME dentro de uma tag A HREF.

<A NAME='middleofpage'></A>

Você pode então mudar sua tag A HREF para pular para 'middleofpage' e executar o JavaScript no evento OnClick, assim que acontecer da seguinte forma:

<A HREF="#middleofpage" onclick="var elem = document.getElementById('foo');">Get the object</a>

Haverá muitas vezes onde você não quer que o link pule, então você pode fazer duas coisas:

<A HREF="#thislinkname" name='thislinkname' onclick="var elem = document.getElementById('foo');">Get the object</a>

Agora, ele não chegará a lugar nenhum quando clicado, mas poderá fazer com que a página se centralize novamente na janela de visualização atual. Isso não é bonito. Qual é a melhor maneira de fornecer javascript in-line, usando um A HREF, mas sem ter que fazer nenhuma das opções acima? JavaScript: void (0);

<A HREF="JavaScript:void(0);" onclick="var elem = document.getElementById('foo');">Get the object</a>

Isso diz ao navegador para ir em branco, mas em vez disso, executar o JavaScript válido: void (0); função primeiro na tag HREF porque ela não contém espaços em branco e não será analisada como uma URL. Em vez disso, ele será executado pelo compilador. VOID é uma palavra-chave que, quando fornecida com um parâmetro de 0, retorna UNDEFINED, que não usa mais recursos para manipular um valor de retorno que ocorreria sem especificar 0 (é mais compatível com gerenciamento de memória / desempenho).

A próxima coisa que acontece é o OnClick é executado. A página não se move, nada acontece em termos de exibição.




Os desenvolvedores da Web usam javascript:void(0) porque é a maneira mais fácil de impedir o comportamento padrão de a tag. void(*anything*) retorna undefined e é um valor falso. e retornar um valor return false é como return false no evento onclick de a tag que impede seu comportamento padrão.

Então, eu acho que javascript:void(0) é a maneira mais simples de impedir o comportamento padrão de a tag.




Related