Não consigo descobrir qual é o problema com este JSFiddle .
HTML:
<input type="button" value="test" onclick="test()">
JavaScript:
function test(){alert("test");}
E quando clico no botão - nada aconteceu. O console diz "teste não definido"
Eu li a documentação do JSFiddle - lá está escrito que o código JS é adicionado <head>
e o código HTML é adicionado <body>
(portanto, esse código JS é anterior ao html e deve funcionar).
javascript
html
jsfiddle
Larry Cinnabar
fonte
fonte
Respostas:
A função está sendo definida dentro de um manipulador de carga e, portanto, está em um escopo diferente. Como @ellisbben observa nos comentários, você pode corrigir isso definindo-o explicitamente no
window
objeto. Melhor ainda, altere-o para aplicar o manipulador ao objeto discretamente: http://jsfiddle.net/pUeue/Observe que aplicar o manipulador dessa maneira, em vez de embutir, mantém seu HTML limpo. Estou usando jQuery, mas você pode fazer isso com ou sem uma estrutura ou usando uma estrutura diferente, se quiser.
fonte
test
foi definido dentro de umaonLoad
função; usarwindow.test = function(){/*...*/}
faz com que funcione perfeitamente bem.show
a qualquer URL do jsfiddle para ver do que estou falando: jsfiddle.net/Yazpj/showSe você não especificar a configuração de wrap, o padrão é "onLoad". Isso faz com que todo o JavaScript seja agrupado em uma função executada após o carregamento do resultado. Todas as variáveis são locais para esta função, portanto, indisponíveis no escopo global.
Altere a configuração de embalagem para "sem embalagem" e funcionará:
http://jsfiddle.net/zalun/Yazpj/1/
Mudei a estrutura para "Sem biblioteca" porque você não usa nenhuma.
fonte
Há outra maneira de declarar sua função em uma variável como esta:
jsFiddle
Detalhes
EDIT (com base nos comentários de @nnnnnn)
@nnnnnn:
Quando você define uma função como esta:
A função é definida localmente, mas quando você define sua função sem
var
:test
é definido nowindow
objeto que está no escopo de nível superior.Como @zalun, diga:
Mas se você usar esta sintaxe:
Você tem acesso à função
test
porque ela é definida globalmenteReferências :
fonte
test =
(semvar
) resolveria o problema.Altere a configuração de agrupamento no painel Estruturas e extensões para "Sem agrupamento
<body>
"fonte
Não há problema com seu código. Basta escolher a extensão onLoad () do lado direito.
fonte
fonte
HTML:
JavaScript:
fonte