JS:表单提交不会带来附加值

时间:2019-12-14 09:54:39

标签: javascript html filereader

以下问题::我需要在提交表单之前在表单的输入字段中放置一个值。我使用jQuery Submit()函数处理此问题。点击提交后,输入值会直观地显示在输入字段中,但是发送表单时,我的输入字段中没有设置任何值。我的验证处理程序说该字段是必填字段。

这是我的代码的相关部分:

HTML: 
<form id="form" method="POST">
   <input id="gps_daten" type="file">
   <input id="input" type="hidden">
   <button type="submit">Submit</button>
</form>


JS:
$(document).ready(function(){
   $('#form').submit(function(){
      input_file = document.getElementById('gps_daten').files[0];
      var data; 
      if(input_file){
          var reader = new FileReader();
          reader.readAsText(input_file , "UTF-8");
          reader.onload = function (evt){
             data = evt.target.result;
             var geoJSON = toGeoJSON.gpx((new DOMParser()).parseFromString(data, 'text/xml'));
             document.getElementById('input').value = geoJSON.features[0].geometry.coordinates[0][0]);
          }
      }             
   }
   return true;
}

以某种方式似乎在FileReader仍在工作时提交了表单。我希望有人可以帮助我。预先感谢!

2 个答案:

答案 0 :(得分:0)

编辑

更改要收听的元素。如果我理解正确,那么您希望用文件输入中的值来填充隐藏输入字段的值。

因此,在这种情况下,请监听change输入上的#gps_daten事件。只要更改了此输入的值,就会触发此事件。实际上,在提交表单之前,只要您将文件上传到输入中,这都会运行FileReader代码。

现在,当您提交表单时,表单中的#input上已经有一个值。

$(document).ready(function(){
   $('#gps_daten').on('change', function(event){
      var input_file = event.target.files[0];
      if(input_file){
          var reader = new FileReader();
          reader.readAsText(input_file , "UTF-8");
          reader.onload = function (evt){
             var data = evt.target.result;
             var geoJSON = toGeoJSON.gpx((new DOMParser()).parseFromString(data, 'text/xml'));
             $('#input').val(geoJSON.features[0].geometry.coordinates[0][0]));
          }
      }             
   }
   return true;
}

原始答案

event回调中使用submit参数。这将打开Event对象的用法,该对象为您提供有关提交的信息以及对该事件的一些控制。

$('#form').submit(function(event){
  ...

submit回调的结尾和内部,使用event.preventDefault()告诉浏览器不要执行submit事件的默认行为。顾名思义,这将阻止表单提交。

  ...
    event.preventDefault();
  });
  return true;
}

答案 1 :(得分:0)

它与一次性监听器和手动提交一起使用:

$('#form').one('submit', function(event) {
   ...
   $( "#form" ).submit(); 
   return false;
}

因此,第一次不提交表单时,当手动调用Submit时,submit将执行其默认工作。