Armadilhas da vida!
Hoje deparei com esse erro estranho pra mim, nunca tinha que acontecido antes.
Em um dos projetos que estou desenvolvendo, existe um menu dropdown, e queria que ao selecionar uma opção o formulário era automaticamente enviado. criei a função javascript pra ser menos intrusiva possível e caso o browser esteja com o javascript desabilitado o menu dropdown pode ser ativado com um botão de submit na frente 🙂

Mas… como não sou um Expert (ainda! :P), cometi um erro muito bobo!
e pior, quebrei a cabeça a manha inteira!! e nada de resolver o problema, o firefox só me retornava “submit(); is not a function”. Depois de muito quebrar a cabeça, consegui resolver o problema. Irei mostrar pra vocês, qual o problema e como resolver, para que ninguém cometa esse mesmo erro que eu.

  1. function to_estande(){
  2.  
  3. var f = document.getElementById(‘myform’);
  4.  
  5. var s = document.getElementById(‘estande’);
  6.  
  7. s.onchange = function(){f.submit.click();}
  8.  
  9. }
  10.  
  11. window.onload = function(){to_estande();}

Esse ai em cima, é o danado do javascript

  1. <form action="/estandes/to" method="post" id="myform" name="myform">
  2.  
  3. <label for="estande">Ir para o estande:</label>
  4.  
  5. <select name="estande" id="estande">
  6.  
  7. <option value="exemplo1">exemplo1</option>
  8.  
  9. <option value="exemplo2">exemplo1</option>
  10.  
  11. </select>
  12.  
  13. <input id="submit" name="submit" value="Ir" type="submit" />
  14.  
  15. </form>

Esse é o culpado de tudo, a marcação html, o botão submit estava com o valor “submit” no atributo id e name.
Foi ai que descobri, eu estava chamando o botão submit e não a função submit(); 🙂 “submit(); is not a function. Submit is a button” 😉

Se eu alterar o valor dos atributos id e name do botão submit tudo estará resolvido, eu posso ate apagar o atributo name, ele não esta sendo usado mesmo! hehe … porem eu não posso alterar nem apagar o id, se não precisarei alterar um bocado de CSS 🙁

E agora José, o que eu faço?

Facinho 😉 … basta alterar

De

  1. f.submit();

Para

  1. f.submit.click();

e “voiala” todos vivemos felizes para sempre, com javascript não intrusivo, e ainda por cima funciona no IE 🙂

Abraços!