Autor Tópico: Button SEMPRE submete formulário  (Lida 2227 vezes)

Carlosedgi

  • Intermediário
  • ***
  • Mensagens: 147
    • Email
Button SEMPRE submete formulário
« Online: Julho 22, 2016, 10:56:24 am »
Pessoal, estou com uma aplicação blank que monta um form que estou utilizando para importar arquivos de dados do dbase para depois jogar um banco MySQL...

Antes de submeter o arquivo, criei esta uma função em javascript vara validar a extensão do arquivo e o button aponta para ela. Só que toda a hora que clico na porcaria do Button, ele submete o formulário, eu querendo ou não...

Alguém já passou por isso?

Eu sempre usei essa função javascript... não entendo o que está acontecendo... segue o código:


?>

<script type="text/javascript">    

function valida_arquivo(formulario, arquivo) {
   extensao_permitida = ".dbf";
   meuerro = "";
   if (!arquivo) {
      //Se não tenho arquivo, é porque não se selecionou um arquivo no formulário.
       meuerro = "Não foi selecionado nenhum arquivo";
   }else{
      //recupero a extensão deste nome de arquivo
      extensao = (arquivo.substring(arquivo.lastIndexOf("."))).toLowerCase();
      //alert (extensao);
      //comprovo se a extensão está entre as permitidas
      permitida = false;
      if (extensao_permitida == extensao) {
         permitida = true;
         break;
      }

      if (!permitida) {
         meuerro = "Tivo de arquivo de dados inválido!<br>Favor selecionar um arquivo com a extenção " + extensoes_permitidas.join();
       }else{
          //submeto!
         //formulario_.submit();
         return 1;
       }
   }
   //se estou aqui é porque não se pode submeter
   alert (meuerro);
   return 0;
}

</script>
   
<?php
   switch([cd_tipo])
   {
      case "bm_custos":
      {
         $desc_arquivo="Boletim Mensal de Custos";
         $desc_exemplo="ELEM0316.dbf";
         break;
      }
      case "bm_composicoes":
      {
         $desc_arquivo="Boletim Mensal de Composições";
         $desc_exemplo="EMOP0216.dbf";
         break;
      }
      case "cat_mat":
      {
         $desc_arquivo="Catálogo de Materiais";
         $desc_exemplo="MAT0316.dbf";
         break;
      }
      case "cat_ref":
      {
         $desc_arquivo="Catálogo de Referência";
         $desc_exemplo="REF.dbf";
         break;
      }
      case "cat_composicoes":
      {
         $desc_arquivo="Catálogo de Composições";
         $desc_exemplo="COMP0316.dbf";
         break;
      }
      case "bm_custos":
      {
         $desc_arquivo="Catálogo de Itens Reutilizados";
         $desc_exemplo="REUT0316.dbf";
         break;
      }
   }
   
   echo "<div class='scGridHeaderFont' align='center' style='padding-top:15px; padding-bottom:10px;'>Importar ".$desc_arquivo."</div>";
   
   echo "Selecione o arquivo de dados Dbase no formulário abaixo para iniciar a importação.<br>Exemplo: ".$desc_exemplo."<br><br>";
   
   echo "<form enctype='multipart/form-data' action='?modo=processa_arq' method='POST'>";
    // MAX_FILE_SIZE deve preceder o campo input
    echo "<input type='hidden' name='MAX_FILE_SIZE' value='30000' />";
    // O Nome do elemento input determina o nome da array $_FILES
    echo "Selecione o arquivo: ";
   echo "<div align='center'>";
   echo "<input style='vertical-align: middle; display:inline-block;' class='scButton_default' name='import_file' type='file' /><br><br>";

   echo "<button style='vertical-align: middle; display:inline-block;' class='scButton_default' onclick='valida_arquivo(this.form, this.form.import_file.value)'>Enviar</Button>";
   echo "&nbsp;&nbsp;&nbsp;&nbsp;";
   echo "<button style='vertical-align: middle; display:inline-block;' class='scButton_default' onclick='self.parent.tb_remove()'>Sair</Button>";
 
   echo "</div>";
   echo "</form>";

Carlosedgi

  • Intermediário
  • ***
  • Mensagens: 147
    • Email
Re:Button SEMPRE submete formulário
« Responder #1 Online: Julho 22, 2016, 12:23:32 pm »
Opa, segue uma pequena correção no arquivo javascript... de tanto testar, acabei errando uma besteirinha na programação.

function valida_arquivo(formulario, arquivo) {

   extensao_permitida = ".dbf";
      meuerro = "";

    if (!arquivo)
   {
       //Se não tenho arquivo, é porque não se selecionou um arquivo no formulário.
          meuerro = "Não foi selecionado nenhum arquivo";
      }
   else
   {
         //recupero a extensão deste nome de arquivo
         extensao = arquivo.substring(arquivo.lastIndexOf(".")).toLowerCase();

         //comprovo se a extensão está entre as permitidas
         permitida = false;
         if (extensao_permitida == extensao)
      {
            permitida = true;
         }
         if (permitida==false)
      {
            meuerro = "Tipo de arquivo de dados inválido! Favor selecionar um arquivo com a extenção " + extensao_permitida;
          }
      else
      {
            //submeto!
            formulario.submit();
            return 1;
          }

      }
      //se estou aqui é porque não se pode submeter
      alert (meuerro);
      return 0;

Carlosedgi

  • Intermediário
  • ***
  • Mensagens: 147
    • Email
Re:Button SEMPRE submete formulário
« Responder #2 Online: Julho 22, 2016, 12:24:46 pm »
Acabei resolvendo substituindo o <button> pelo <input type="button"> mas esse inferno não deveria acontecer, certo?

Porque o <button> sempre submete???

Anderson Mamede

  • Iniciante
  • **
  • Mensagens: 84
Re:Button SEMPRE submete formulário
« Responder #3 Online: Julho 22, 2016, 01:59:25 pm »
Porque o <button> sempre submete???


Isso é um comportamento padrão do elemento button. Veja uma parte da especificação dele:


Citar
A button element with no type attribute specified represents the same thing as a button element with its type attribute set to "submit".

Carlosedgi

  • Intermediário
  • ***
  • Mensagens: 147
    • Email
Re:Button SEMPRE submete formulário
« Responder #4 Online: Julho 22, 2016, 04:08:43 pm »
Ixi... programador véio tem dessas coisas... esse <button> é novidade do html5... eu sempre usei o <input type="button">

Se eu deixar o <button> com type="button" resolve o problema, certo?

Vlw a dica!

Anderson Mamede

  • Iniciante
  • **
  • Mensagens: 84
Re:Button SEMPRE submete formulário
« Responder #5 Online: Julho 22, 2016, 04:31:34 pm »
Isso, deixando com type="button" ele não vai submeter.