Por que nomear seu formulário HTML botão enviar “enviar” quebrar coisas?
-
22-08-2019 - |
Pergunta
Em ASP.NET webforms e ASP 3 (Classic ASP), me deparei com um problema no qual nomear seu formulário de botão enviar "enviar" iria "quebrar as coisas". Abaixo está o HTML renderizado:
<input type="submit" name="Submit" value="Submit" id="Submit" />
Eu digo "quebrar as coisas", porque eu não sei exatamente o porquê ou o que aconteceu. Mas os sintomas geralmente eram de que pressionar o botão enviar, por vezes, não fez nada ou seja, ele simplesmente não funcionou. Mas às vezes ele fez o trabalho.
Na verdade, eu só construiu um teste de página de um rápido com o código abaixo, e enviar funcionou bem:
<form id="form1" runat="server">
<div>
<asp:TextBox ID="txtTest" runat="server" />
<asp:Button ID="Submit" runat="server" Text="Submit" />
</div>
</form>
Mas , no passado, este problema surgiu, e renomear o botão sempre o sintoma desaparece.
Assim, faz todo o HTML / HTTP / Browser especialista conhecimento de qualquer razão para definir id = "submit" em um botão Enviar iria causar algum problema?
Editar
SO comentário parece sugerir "enviar" é uma palavra-chave reservada. Mas por que o "id" ou atributos "nome" intefere com isso? E como faz isso "reservado" palavra-chave se implementado de tal forma que poderia causar conflitos?
obrigado novamente
Solução
O elemento form
tem um método chamado submit
, mas também tem os elementos de formulário na forma como membros.
Se você tem um botão no formulário chamado submit
, você pode acessá-lo usando document.form1.submit
. No entanto, uma vez que é o mesmo nome que o método submit
, já não há qualquer maneira de acessar esse método. Se você usar o método para enviar o formulário, que o trabalho não será mais.
Por exemplo, se você tem um botão que envia o formulário usando Javascript, isso não funcionar:
<input type="button" name="submit" onclick="this.form.submit();" value="try" />
Quando o botão tenta usar o método submit
, ele irá em vez de obter uma referência a si mesmo (e uma mensagem de erro ao tentar chamá-lo, como o botão não é uma função).
Outras dicas
peço-lhe para ficar longe de tudo de palavras reservadas do DOM do JavaScript. uso "minha" na frente de tudo o que você definir, ou US $, ou qualquer outra coisa que é claramente não vai entrar em conflito com as palavras reservadas que você pode acidentalmente apenas sobrecarregar e causar estragos.
O code-behind que é gerado que permite vincular eventos para o objeto são nomeados com base nos valores especificados.
Basta usar onsubmit se o problema no formulário de submissão
<form id="form1" runat="server" onsubmit="this.submit()">
<div>
<asp:TextBox ID="txtTest" runat="server" />
<asp:Button ID="Submit" runat="server" Text="Submit" Type="submit"/>
</div>
</form>