Estou tentando usar um botão HTML para chamar uma função JavaScript.
Aqui está o código:
<input type="button" value="Capacity Chart" onclick="CapacityChart();">
Parece não funcionar corretamente. Existe uma maneira melhor de fazer isso?
Aqui está o link: http://projectpath.ideapeoplesite.com/bendel/toolscalculators.html, clique na guia de capacidade na seção inferior esquerda. O botão deve gerar um alerta se os valores não forem alterados e produzir um gráfico se você inserir valores.
javascript
html
forrest
fonte
fonte
Respostas:
Existem algumas maneiras de lidar com eventos com HTML / DOM. Não existe um caminho certo ou errado, mas modos diferentes são úteis em situações diferentes.
1: Existe uma definição no HTML:
2: Adicionamos à propriedade DOM do evento em Javascript:
3: E há anexar uma função ao manipulador de eventos usando Javascript:
O segundo e o terceiro métodos permitem funções em linha / anônimas e ambos devem ser declarados após o elemento ter sido analisado no documento. O primeiro método não é XHTML válido porque o atributo onclick não está na especificação XHTML.
Os primeiro e segundo métodos são mutuamente exclusivos, ou seja, o uso de um (o segundo) substituirá o outro (o primeiro). O terceiro método permitirá que você anexe quantas funções desejar ao mesmo manipulador de eventos, mesmo que o primeiro ou o segundo método também tenham sido usados.
Muito provavelmente, o problema está em algum lugar da sua
CapacityChart()
função. Depois de visitar seu link e executar seu script, a função CapacityChart () é executada e os dois pop-ups são abertos (um é fechado conforme o script). Onde você tem a seguinte linha:Tente o seguinte:
EDITAR
Quando vi seu código, pensei que você estivesse escrevendo especificamente para o IE. Como outros já mencionaram, você precisará substituir as referências
document.all
pordocument.getElementById
. No entanto, você ainda terá a tarefa de corrigir o script depois disso, portanto, recomendo que ele funcione pelo menos no IE primeiro, pois qualquer erro cometido ao alterar o código para funcionar em vários navegadores pode causar ainda mais confusão. Quando estiver funcionando no IE, será mais fácil saber se ele está funcionando em outros navegadores enquanto você atualiza o código.fonte
$("#clickMe").bind('click', function () { alert('hello!'); };)
Eu diria que seria melhor adicionar o javascript de uma maneira não invasiva ...
se você estiver usando o jQuery, poderá fazer algo como:
fonte
Seu HTML e a maneira como você chama a função no botão parecem corretos.
O problema parece estar na
CapacityCount
função. Estou recebendo esse erro no meu console no Firefox 3.5: "document.all is undefined" na linha 759 do bendelcorp.js.Editar:
Parece que
document.all
é apenas uma coisa do IE e é uma maneira não padrão de acessar o DOM. Se você usardocument.getElementById()
, provavelmente deve funcionar. Exemplo: emdocument.getElementById("RUnits").value
vez dedocument.all.Capacity.RUnits.value
fonte
Parece correto. Eu acho que você definiu sua função com um nome diferente ou em um contexto que não é visível para o botão. Adicione algum código
fonte
Só para você saber, o ponto-e-vírgula ( ; ) não deveria estar lá no botão quando você chama a função.
Portanto, deve ficar assim:
onclick="CapacityChart()"
então tudo deve funcionar :)
fonte
Um grande problema que você tem é que você está usando o sniffing do navegador sem um bom motivo:
Estou no Chrome, então
navigator.appName
nãoNetscape
. O Chrome suportadocument.all
? Talvez, mas talvez não. E quanto a outros navegadores?A versão do código na
Netscape
ramificação deve funcionar em qualquer navegador desde o Netscape Navigator 2 de 1996, então você provavelmente deve continuar com isso ... exceto que não funcionará (ou não está garantido que funcione) ) porque você não especificou umname
atributo nosinput
elementos, portanto eles não serão adicionados àelements
matriz do formulário como elementos nomeados:Dê a eles um nome e use a
elements
matriz ou (melhor) useque funcionará em todos os navegadores modernos - sem necessidade de ramificação. Para garantir a segurança, substitua esse farejador por uma versão do navegador maior ou igual a 4 por uma verificação de
getElementById
suporte:Você provavelmente deseja validar sua entrada também; algo como
ajudaria.
fonte
document.getElementById
e remoção de outras coisas.Seu código está falhando nesta linha:
Eu tentei pisar embora com firebug e falha lá. isso deve ajudá-lo a descobrir o problema.
você referenciou jquery. você também pode usá-lo em todas essas funções. isso limpará seu código significativamente.
fonte
Eu tenho um código de botão inteligente para chamada de função:
fonte
RESPOSTA SIMPLES:
Onde ID é o ID do campo de entrada.
fonte
maneira boba:
Você deve ler sobre javascript discreto e usar um método de ligação de estruturas para vincular retornos de chamada a eventos dom.
fonte
javascript:
protocolo não é necessário noonclick
evento. O evento onclick já é javascript. Ojavascript:
protocolo é para executar o javascript no atributo href de um link.