是否可以通过JavaScript发送包含提交按钮的HTML表单?
我需要通过HTTP发送一个文件,然后通过单击将表单发送到多个目的地 表单有一个提交按钮是否可以通过JavaScript发送包含提交按钮的HTML表单?,javascript,jquery,html,forms,Javascript,Jquery,Html,Forms,我需要通过HTTP发送一个文件,然后通过单击将表单发送到多个目的地 表单有一个提交按钮 <input type="submit" id="button1" name="submit" value="upload file"> 我的问题:如何通过包含提交按钮的JavaScript发送表单?如何通过JavaScript单击提交按钮 这是我的Java脚本文件: // If frame 1 is loaded, the function prepareUpload() will be ex
<input type="submit" id="button1" name="submit" value="upload file">
我的问题:如何通过包含提交按钮的JavaScript发送表单?如何通过JavaScript单击提交按钮
这是我的Java脚本文件:
// If frame 1 is loaded, the function prepareUpload() will be executed
$("#frame1").ready(function() {
prepareUpload();
});
function prepareUpload(){
// click-handler is registered to button1
$('#button1').click(function(){
// if clicked...
// "Please Wait" window
$.blockUI({ css: {
border: 'none',
padding: '15px',
backgroundColor: '#000',
'-webkit-border-radius': '10px',
'-moz-border-radius': '10px',
opacity: .5,
color: '#fff'
} });
//register load handler on iframe which triggers uploadData()
$('#frame1').load(function(){
// reload from iframe
uploadData();
});
iTargetNumber = 0;
// call function uploadData()
uploadData();
return true;
});
}
function uploadData() {
var dataSet = data[iTargetNumber];
document.getElementById("statusbar").style.width = (iTargetNumber / data.length * 200) + "px";
// if file is uploaded to all servers...
if (iTargetNumber == data.length) {
document.getElementById("statustext").innerHTML = "done";
// Reload browser window
document.location.reload();
return;
}
// status message
document.getElementById("statustext").innerHTML = "uploading to " + dataSet.sUrl;
//set "action" attribute in HTML form
$('#form1').attr('action', dataSet.sUrl);
//set hidden fields in HTML form
for (var key in dataSet){
$('#' + key).attr('value', dataSet[key]);
}
// HERE IT HANGS after the first run is completed because of the submit button.
//submit HTML form with correct values
$('#form1').submit();
// increment variable +1
iTargetNumber++;
}
// initialize variable
var iTargetNumber = 0;
由于“提交”按钮,它在发送第一个表单后挂起
使用
var myForm = document.forms.form1
var emptyForm = document.createElement('form');
emptyForm.submit.apply(myForm);
代替
$('#form1').submit();
这也没用。生成的消息没有包含以下行:
Content-Disposition: form-data; name="submit"
upload file
一个额外的隐藏字段,如
<input type="hidden" id="submit" name="submit" value="submit">
这将创建一个内容配置:表单数据;name=submit也没有帮助,因为它将位于文件内容之前,并且最终不会有上载文件
================
问题解决了。解决方案是通过按钮调用JavaScript函数
<button id="button1">upload file</button>
表单内部还有一个隐藏的提交按钮
<input type="submit" style="display:none" id="button2" name="submit" value="upload file">
JavaScript函数调用这个隐藏的提交按钮。现在,它可以正常工作了。从另一个表单获取提交方法就可以了
var myForm = document.forms.id_of_form;
var emptyForm = document.createElement('form');
emptyForm.submit.apply(myForm);
我不知道哪里出了问题,但听起来使用AJAX可能更适合您正在尝试的工作。你试过$button1.onclick吗?因为,这本质上就是用户在单击按钮时触发的。此外,我还要检查由于元素上的闭包(尤其是iTargetNumber和data)而导致的未定义值;但是Firebug说$button1.onclick不是一个函数。以我的形式:好的,等等,显然这必须是document.getElementByIdbutton1.onclick。我的错。您是否检查了uploadData中未定义的值?请注意,解决方案中隐藏的元素不是提交按钮,而是您将其值设置为upload file。试试。我在哪里可以插入这些行?我插入了您的行并删除了$'form1'。提交;但是消息不包括内容配置:表单数据;name=提交上传文件。我与wireshark进行了检查,服务器需要发送文件,只有在包含这些行时才接受。提交按钮只有在用户激活时才成功。您必须使用隐藏输入复制数据。如何使用隐藏输入复制数据?我需要将一个表单和一个选定的文件发送到不同的服务器,这只能通过Java脚本实现,因为表单只能有一个目标。下面是完整的代码:您将一个输入添加到表单中,该表单具有隐藏的类型以及您想要的相同名称和值。
<input type="submit" style="display:none" id="button2" name="submit" value="upload file">
var myForm = document.forms.id_of_form;
var emptyForm = document.createElement('form');
emptyForm.submit.apply(myForm);