以下问题::我需要在提交表单之前在表单的输入字段中放置一个值。我使用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仍在工作时提交了表单。我希望有人可以帮助我。预先感谢!
答案 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将执行其默认工作。