Eu sei que isso é uma má prática. Não escreva códigos como este, se possível.
Obviamente, sempre nos encontraremos em situações em que um snippet inteligente de Javascript embutido pode solucionar um problema rapidamente.
Estou buscando esta consulta no interesse de entender completamente o que acontece (e as possíveis armadilhas) quando algo assim é escrito:
<a href="#" onclick="alert('Hi')">Click Me</a>
Até onde eu sei, isso é funcionalmente o mesmo que
<script type="text/javascript">
$(function(){ // I use jQuery in this example
document.getElementById('click_me').onclick =
function () { alert('Hi'); };
});
</script>
<a href="#" id="click_me">Click Me</a>
Extrapolando disso, parece que a string atribuída ao atributo onclick é inserida em uma função anônima que é atribuída ao manipulador de cliques do elemento. Este é realmente o caso?
Porque estou começando a fazer coisas assim:
<a href="#" onclick="$(this).next().fadeIn(); return false;">Display my next sibling</a> <!-- Return false in handler so as not to scroll to top of page! -->
O que funciona. Mas eu não sei o quanto isso é um hack. Parece suspeito porque não há nenhuma função aparente que está sendo retornada!
Você pode perguntar, por que está fazendo isso, Steve? JS embutido é uma prática ruim!
Bem, para ser sincero, estou cansado de editar três seções diferentes de código apenas para modificar uma seção de uma página, especialmente quando estou apenas criando um protótipo de algo para ver se funcionará. É muito mais fácil e, às vezes, até faz sentido que o código especificamente relacionado a esse elemento HTML seja definido dentro do elemento: Quando eu decido, 2 minutos depois, que essa foi uma ideia terrível, terrível, eu posso destruir a div inteira (ou qualquer outra coisa) ) e não tenho um monte de mistérios misteriosos de JS e CSS no resto da página, diminuindo a renderização. Isso é semelhante ao conceito de localidade de referência, mas, em vez de erros de cache, estamos observando bugs e inchaço do código.
#click_meno evento DOMready ou colocar o script após o nó.
document.getElementById("click_me").onclick;. Ou alerte. Você verá que está em uma função.