Validação CFFORM e submit via onClick, bug ou o que?

Semana passada estava desenvolvendo um website quando surgiu a necessidade de se submeter um formulário (criado com CFFORM) com um link de texto, ao invés de uma imagem ou tradicional botão de submit. Pensei: nada mais simples. Basta chamar a função submit(); invocando JavaScript direto na tag <a> (<a href=”JavaScript:submit();”>) ou usando o método OnClick (<a href=”#” OnClick=”submit();”>).

Mas acontecia um problema estranho: ao se clicar no link para submeter o formulário, toda em qualquer validação necessária para este formulário (justamente o que mais nos interessa na tag CFFORM) era ignorada e o formulário submetido assim mesmo. Campos obrigatórios que eram, por exemplo, deixados em branco, eram submetidos assim mesmo, ignorando a validação gerada pelo CFFORM (atributo required=”yes”).

Confira o problema aqui. Googlei a respeito mas não encontrei nada, apenas alguns relatos de problemas parecidos, porém sem solução. Para resolver o meu problema imediato, acabei encontrando uma forma de contorno (workaround) relativamente simpls, vulgo gambiarra, que funciona bem e que consiste na criação de uma nova função, exclusiva para (1) forçar as verificações pendentes (onSubmit) e (2) submeter o formulário na seqüência, assim (supondo que o seu formulário seja nomeado como “formulario”):

<script language="JavaScript">
function submitform() {
if (_CF_checkformulario(formulario))
formulario.submit();
}
</script>

O workaround pode ser visto em funcionamento também aqui. Na seqüência postei o meu problema na CF-Brasil e tive a ajuda do Fernando Barros que me disse acertadamente não se tratar de um bug do CFFORM, mas sim de algum outro elemento, muito provavelmente o browser, que não estava seguindo uma recomendação do W3, com base nesta informação. É difícil dizer se o problema é simplesmente este, uma vez que a recomendação é bastante clara: o evento submit deve submeter o formulário (o que efetivamente acontece), mas não fala nada sobre eventuais handlers pendentes e existentes para este mesmo formulário. IE, Mozilla/Firefox e Opera apresentam o mesmo problema. Como JavaScript não é necessariamente uma área cujas recomendações do W3 valham, procurei na Nestcape (mãe do JavaScript) qualquer informação a respeito e de novo acertei a água, nada.

Até agora não encontrei nenhuma explicação definitiva e conclusiva. Por isso pergunto: alguém aí sabe de alguma coisa? Poderia nos dar uma luz?


11 Comments on “Validação CFFORM e submit via onClick, bug ou o que?”

  1. Diego Pires disse:

    Ah um tempo atras tive o mesmo problema mas nem utilizava ColdFusion ainda. http://developer.irt.org/script/1342.htm. Não é bug. Somente a forma que ele trata os eventos.

  2. aaa disse:

    aaaaa

  3. lll disse:

    qq

  4. Ola Colega,

    estou com o mesmo problema que você, o problema realmente esta no metodo onclick, por algum motivo no firefox ele nao aceita, no IE funciona normal…

    Vou dar mais uma pesquisada por ai e ver o que encontro…

    Abraços..

    Marcio Pinheiro
    http://www.marpinheiro.com.br

  5. Alessandro disse:

    É pessoal sou mais a me deparar com tal evento bizarro! O problema acredito ser realmente do FireFox. Estou numa verdadeira sinuca pois o meu publico alvo trabalham com plataforma linux e utilizam o FireFox.

    Se alguem conseguir algo serei muito grato!

  6. anderson disse:

    ja tentou reescrever a funcao usando o getElementById?
    deve funciona

  7. anderson disse:

    alias quem quiser meu msn georgeand666@hotmail.com
    gosto de desafios

  8. Ken disse:

    Opa. Acredito pela data da postagem que você já resolveu o problema, mas o que pode ser feito para isso é chamar uma função que faça a consistência do formulário e caso esteja ok:

    “document.form.submit();”

  9. Hugo disse:

    Resolvi da seguinte forma:

    ab.

  10. A resposta é o seguinte:

    [a href=”javascript: document.getElementById(‘formulario’).submit();”] [/a]

    By.