-formas multi submissão no IE e Google chrome

votos
1

Tenho várias formas (usuário pode adicionar nova forma dinamicamente) em uma página, eles estão todos submetidos à mesma ação struts2. Eu preciso enviar todas essas formas, quando o usuário clica no botão salvar.

As coisas vão bem no FF. Mas no IE e Google chrome, apenas o último formulário é enviado.

Qualquer ajuda é apreciada. Obrigado.

Elementos de cada forma são os mesmos, uma forma um objeto. Dados todos os do formulário será adicionado a um objeto de domínio, em seguida, o objeto será mantido para DB.

JavaScript funcionar para lidar com operação de salvamento:

<script type=text/javascript >
    function submit() {
        var formCnt = document.getElementById('formCnt').value;
        for(var i = 1; i <= formCnt; i++) {
            var formName = 'form' + i;
            document.forms[formName].submit();
        }
    }
</script>
...
<input type=hidden id=formCnt name=formCnt value=5 />

<form action=add.htm name=form1 id=form1 method=post enctype=multipart/form-data />
     <input type=text name=item.price id=item.price value= />
    ...
</form>

<form action=add.htm name=form2 id=form2 method=post enctype=multipart/form-data />
     <input type=text name=item.price id=item.price value= />
    ...
</form>

    ...

<form action=add.htm name=form5 id=form5 method=post enctype=multipart/form-data />
     <input type=text name=item.price id=item.price value= />
    ...
</form>

   ...
Publicado 27/08/2009 em 06:21
fonte usuário
Em outras línguas...                            


3 respostas

votos
0

tente usar document.getElementById(formId).submit();em seu lugar. os document.form.x, document.forms [int], document.forms [id], e métodos document.x de acessar formas não são cross-browser maneiras compatíveis de referência a um formulário.

Também - Eu acredito que uma vez que eu tinha um problema quando eu tinha um nome e um id no meu formulário. A melhor prática é usar id eu acredito.

Respondeu 27/08/2009 em 07:02
fonte usuário

votos
0

Eu acredito que você só está autorizado a enviar apenas um de cada vez - isso pode ser uma prática ruim, mas como sobre basicamente duplicando cada código de formas e replicá-lo em um iframe, enviar o formulário lá, ou isso ou contando com XHR ($. post) para imitar o que os formulários faria.

Respondeu 27/08/2009 em 06:32
fonte usuário

votos
0

Você só deve ser capaz de apresentar um pedido de cada vez. Um botão de envio deve ser dentro de <form>tags, e apenas a forma que o botão enviar está em devem ser apresentadas. Isso oculta inputtag deve haver dentro de uma tag forma bem BTW.

Mesmo quando fazê-lo via JS, um submit()inicia uma nova POSTsolicitação ao servidor. Você só pode fazer um pedido de cada vez, é por isso que apenas o último mostra-se. Eu não tenho idéia por que ele iria trabalhar em FF.

Se você precisa apresentar tudo de uma vez de qualquer maneira, por que quebrá-lo para começar? Se você quiser "subseções" em um formulário, você pode usar as <fieldset>tags.

Editar

O que acontece quando você executar o script é o mesmo como se todas as suas formas têm um botão de envio, e você clique todos os botões submete a fim rápido. Clicando em um botão enviar envia os dados desse formulário para o servidor em um POSTpedido e atualiza a página. Se você é rápido o suficiente para clicar em outro botão antes de a página é atualizada, você pode enviar uma outra forma, o velho pedido será cancelado.

A única maneira que eu posso imaginar como os dados de todas as formas poderia chegar ao servidor da maneira que você está fazendo é se o pedido passa a ser enviados antes do próximo submit()é acionado. Essencialmente, você está confiando no navegador sendo lento, ou pelo menos lidar com o pedido antes de continuar a execução do script. Aparentemente que funciona no FF, mas não em outros navegadores. Como deveria.

Editar 2

Se você precisar enviar vários campos com o mesmo nome, use uma forma e dar a seus campos de nomes exclusivos. O melhor esquema de nomeação depende de como seu backend lida com envios de formulários.

  • item0, item1
  • item.0, item.1
  • Model.0.item, Model.1.item
Respondeu 27/08/2009 em 06:29
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more