Eu quero executar uma função JavaScript simples em um clique sem redirecionar.
Existe alguma diferença ou benefício entre colocar a chamada JavaScript no href
atributo (assim:
<a href="javascript:my_function();window.print();">....</a>
) vs. colocá-lo no onclick
atributo (vinculando-o ao onclick
evento)?
javascript
href
SkunkSpinner
fonte
fonte
Respostas:
Colocar o onclick dentro do href ofenderia aqueles que acreditam fortemente na separação do conteúdo do comportamento / ação. O argumento é que seu conteúdo html deve permanecer focado apenas no conteúdo, não na apresentação ou no comportamento.
O caminho típico atualmente é usar uma biblioteca javascript (por exemplo, jquery) e criar um manipulador de eventos usando essa biblioteca. Seria algo como:
fonte
href
versus inline inonclick
? Supondo que você o colocaria em linha por algum motivo, qual você deveria usar? (Na prática, eu faria o que você sugeriu, mas você parece ter pulado a diferença entre os dois atributos.)ruim:
Boa:
Melhor:
ainda melhor 1:
ainda melhor 2:
Por que melhor? porque
return false
impedirá que o navegador siga o linkmelhor:
Use jQuery ou outra estrutura semelhante para anexar o manipulador onclick pelo ID do elemento.
fonte
href
não está configurada,#
mas como um link real para os navegadores noJS.Em termos de javascript , uma diferença é que a
this
palavra - chave noonclick
manipulador se refere ao elemento DOM cujoonclick
atributo é (nesse caso, o<a>
elemento), enquanto quethis
nohref
atributo se refere aowindow
objeto.Em termos de apresentação , se um
href
atributo estiver ausente em um link (ou seja<a onclick="[...]">
), então, por padrão, os navegadores exibirão otext
cursor (e não opointer
cursor frequentemente desejado ), pois estão tratando o item<a>
como uma âncora e não como um link.Em termos de comportamento , ao especificar uma ação pela navegação via
href
, o navegador normalmente suporta a aberturahref
em uma janela separada usando um atalho ou menu de contexto. Isso não é possível ao especificar uma ação apenas viaonclick
.No entanto, se você está perguntando qual é a melhor maneira de obter ação dinâmica com o clique de um objeto DOM, anexar um evento usando javascript separado do conteúdo do documento é o melhor caminho a percorrer. Você poderia fazer isso de várias maneiras. Uma maneira comum é usar uma biblioteca javascript como jQuery para vincular um evento:
fonte
eu uso
Um longo caminho, mas ele faz o trabalho. use um estilo A para simplificar, então ele se torna:
fonte
nohref
atributo antes. Essa é a maneira mais lógica / elegante de lidar com essas ações javascript. Isso é compatível com FF12 e IE8. Portanto, substituirei todo o meuhref="JavaScript:void(0);"
pornohref
. Muito obrigado. Felicidades.nohref
faz parte daarea
tag, nãoa
! Seu exemplo é o mesmo que<a onClick="alert('Hello World')">HERE</a>
nohref
não existe em umaa
tag.Além de tudo aqui, o href é mostrado na barra de status do navegador e não clica em não. Eu acho que não é fácil mostrar o código javascript lá.
fonte
a melhor maneira de fazer isso é com:
O problema é que isso adicionará um hash (#) ao final do URL da página no navegador, exigindo que o usuário clique no botão voltar duas vezes para acessar a página anterior à sua. Considerando isso, você precisa adicionar algum código para interromper a propagação de eventos. A maioria dos kits de ferramentas javascript já terá uma função para isso. Por exemplo, o kit de ferramentas dojo usa
para fazer isso.
fonte
href="#"
o navegador, procurará uma marca de âncora nomeada e, como não a encontrará, fará com que a janela role para o topo da página, algo que talvez não seja perceptível se você já está no topo. Para evitar esse comportamento, use: emhref="javascript:;"
vez disso.A resposta principal é uma prática muito ruim, nunca se deve vincular a um hash vazio, pois isso pode criar problemas no caminho.
O melhor é vincular um manipulador de eventos ao elemento, como muitas outras pessoas declararam, no entanto,
<a href="javascript:doStuff();">do stuff</a>
funciona perfeitamente em todos os navegadores modernos, e eu o uso extensivamente ao renderizar modelos para evitar a necessidade de religar novamente para cada instância. Em alguns casos, essa abordagem oferece melhor desempenho. YMMVOutro detalhe interessante ....
onclick
ehref
ter comportamentos diferentes ao chamar javascript diretamente.onclick
passará othis
contexto corretamente, enquantohref
não funcionará, ou seja<a href="javascript:doStuff(this)">no context</a>
, não funcionará, enquanto<a onclick="javascript:doStuff(this)">no context</a>
funcionará.Sim, eu omiti o
href
. Embora isso não siga as especificações, ele funcionará em todos os navegadores, embora, idealmente, deva incluir umahref="javascript:void(0);"
boa medidafonte
Ter
javascript:
qualquer atributo que não seja especificamente para scripts é um método desatualizado de HTML. Embora tecnicamente funcione, você ainda está atribuindo propriedades javascript a um atributo que não é script, o que não é uma boa prática. Pode até falhar em navegadores antigos, ou mesmo em alguns modernos (uma postagem no fórum no Google parece indicar que o Opera não gosta de 'javascript:' urls).Uma prática melhor seria a segunda maneira, de colocar seu javascript no
onclick
atributo, que será ignorado se nenhuma funcionalidade de script estiver disponível. Coloque um URL válido no campo href (geralmente '#') para fallback para aqueles que não possuem javascript.fonte
funcionou para mim usando esta linha de código:
fonte
Isso funciona
fonte
Pessoalmente, acho chato fazer chamadas javascript na tag HREF. Normalmente, não presto muita atenção se algo é ou não um link javascript, e muitas vezes quero abrir as coisas em uma nova janela. Quando tento fazer isso com um desses tipos de links, recebo uma página em branco com nada e javascript na minha barra de localização. No entanto, isso é evitado um pouco usando um onlick.
fonte
Mais uma coisa que notei ao usar "href" com javascript:
O script no atributo "href" não será executado se a diferença de horário entre 2 cliques for bastante curta.
Por exemplo, tente executar o exemplo a seguir e clique duas vezes (rápido!) Em cada link. O primeiro link será executado apenas uma vez. O segundo link será executado duas vezes.
Reproduzido no Chrome (clique duplo) e IE11 (com clique triplo). No Chrome, se você clicar rápido o suficiente, poderá fazer 10 cliques e ter apenas 1 execução de função.
Firefox funciona bem.
fonte
Primeiro,
href
é melhor incluir o URL, pois permite aos usuários copiar links, abrir em outra guia etc.Em alguns casos (por exemplo, sites com alterações frequentes de HTML), não é prático vincular links sempre que houver uma atualização.
Método típico de ligação
Link normal:
E algo assim para JS:
Os benefícios desse método são a separação clara de marcação e comportamento e não precisam repetir as chamadas de função em todos os links.
Método sem vinculação
Se você não deseja vincular todas as vezes, no entanto, pode usar onclick e passar o elemento e o evento, por exemplo:
E isso para JS:
O benefício desse método é que você pode carregar novos links (por exemplo, via AJAX) sempre que quiser, sem ter que se preocupar em vincular todas as vezes.
fonte
fonte
Percebi que o javascript: hrefs não funcionava quando a página foi incorporada ao recurso de página da Web do Outlook, onde uma pasta de email está configurada para mostrar um URL
fonte