JS:表单提交不带附加值

JS: Form Submit doesn't take added value

以下问题: 我需要在提交表单之前在表单的输入字段中放置一个值。我使用 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 仍在工作时以某种方式提交。我希望有人可以帮助我。提前致谢!

编辑

改变你想听的元素。如果我理解正确的话,您希望隐藏输入字段的值用文件输入中的值填充。

所以在这种情况下,监听 #gps_daten 输入上的 change 事件。每当更改此输入的值时,都会触发此事件。实际上,这将 运行 您的 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;
}

原回答

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

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

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

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

它适用于一次性监听器和手动提交:

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

所以第一次没有提交表单时,当手动调用提交时,提交会执行它的默认工作。