Pergunta

Eu estava sob a impressão de que eu só precisa especificar o "protocolo" quando utilizar JavaScript em URL atributos, tais como em hrefs.Este é o único "útil" de contexto para javascript:?

Sensível:

<a href="javascript:alert('Hello')">World!</a>

Bobo:

<form onsubmit="javascript:alert('oops!')">

Isso é correto?Ou existe algum obscuro bug/caso de uso eu preciso estar ciente?

Foi útil?

Solução

o javascript: O pseudo-protocolo nos manipuladores de eventos será ignorado apenas, você não precisa dele, o mecanismo JavaScript interpretará javascript: como um Declaração de etiqueta.

Um rótulo simplesmente fornece um identificador para uma declaração e permite que você se refira a ele em outro lugar do seu programa.

IMHO, este pseudo-protocolo é útil apenas para marcadores de marcadores ...

Artigo recomendado:

Outras dicas

Como outras respostas já mencionados, evitar o uso de javascript: href links, e é totalmente desnecessária no manipulador de eventos atributos.No entanto, desde A tags são, por vezes, ainda semanticamente correto, você terá que colocar algo no href atributo se você deseja que sua :link e :hover Os estilos CSS para ser aplicada ao elemento no Internet Explorer.Neste caso, use:

<a href="#" onclick="doSomething(); return false;">Link</a>

Ou

<a href="javascript://" onclick="doSomething();">Link</a>

Há um (um tanto obscuro) erro com o javascript protocolo - no Internet Explorer*, ele vai pensar que você sair da página quando você clica no link.Se você estiver usando o janela.onbeforeunload, e , em seguida, sua navegar fora mensagem será exibida no momento.Só por este motivo, nós parei de usar o javascript protocolo completamente então não temos esse bug mostrar até porque nós esqueceu-se de verificar para quando temos de adicionar uma navegar fora mensagem para alguns de página.


* Eu, provavelmente, deve ter especificada a versão quando eu escrevi isso.Eu não lembro de todos, mas apenas no caso de o erro está presente apenas em um agora-principalmente extinta navegador, como o internet explorer 6 ou 7, você está provavelmente melhor para testá-lo você mesmo.

Não especifique nada, nunca. É errado fazer isso em <a> Tags, que devem ser codificadas assim:

<a href='#' onclick='alert("Hello")'>World</a>

É um remanescente dos dias passados. A única vez em que consigo pensar em onde é usada seria na barra de endereços do navegador (e marcadores de Bookmarklet). Mantenha -o fora de suas páginas.

Na prática, você está correto.

Você precisa fazer isso em qualquer caso em que algo diferente do script seja esperado. Em teoria, você pode ficar javascript:whatever Em qualquer lugar que você possa usar um URL, mas isso nunca foi suportado e agora é oficialmente recomendado contra o uso.

No entanto, você realmente não deveria usar javascript: de forma alguma. Para links, você pode usar o onclick atributo. O que está realmente acontecendo hoje em dia é o mecanismo JavaScript está identificando javascript: Como rótulo, e é por isso que o código é executado.

Todos vocês devem conferirhttp://bytes.com/topic/javascript/answers/504856-javascript-pseudo-protocol-event-handlersEspecialmente o post de "Lasse Reichstein Nielsen", porque a maioria das respostas aqui está incorreta de alguma maneira.

Lembre -se também de que a tag de âncora não requer um href! Aquilo é<a>hi</a> é válido xhtml. O problema usando href="#" é que ele pode rolar para o topo da página. Simplesmente não é necessário. Por fim, se você realmente não deseja o comportamento da tag de âncora, não deve usá -lo. Você pode simular uma âncora usando CSS (cursor:pointer) e eventos como MouseEnter e Mouseleable (que são mais trabalhos, mas não "quebram" o comportamento esperado de uma etiqueta de âncora).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top