gpt4 book ai didi

jquery - 推迟文件上传表单提交,直到经过验证

转载 作者:行者123 更新时间:2023-12-03 22:42:18 25 4
gpt4 key购买 nike

Possible Duplicate:
Pause form submission for validation

这是 this 的延续邮政。所以基本上我是在 iframe 中上传文件。但在提交之前,我从表单中获取数据并使用 django 的内置系统检查其有效性(目前它只是一个接受 foo: bar 并返回 json result = "true"的虚拟函数)。我使用两个按钮 - 假可见,调用验证,第二个按钮 - 隐藏,提交表单。使用下面的代码,我可以执行验证,然后当结果为肯定时提交表单。现在,如果我对表单的目标进行硬编码,则不会显示我的警报,并且我非常确定上传不会执行(不幸的是,上传列表每 8 小时刷新一次,所以我会知道它是否在一段时间内有效)。如果未指定目标,则文件将通过重定向上传,因此整个“提交”事件监听器将被省略。更重要的是,整个代码在 Chrome 中根本不起作用。从接收验证响应到显示它,大约需要 2-3 秒(查看 firebug),这是我以前从未见过的。我真的非常想让它发挥作用,因为我已经浪费了两天时间却没有任何结果。

示例链接:

http://ntt.vipserv.org/artifact/

JS:

<script>  
$('#fake_upload_submit').click(function(e){
e.preventDefault();

var fileUploadForm = document.getElementById('file_upload_form');
fileUploadForm.addEventListener("submit", function() {
alert("sent in iframe");
fileUploadForm.target = 'upload_target';
}, false);

$.ajax({
type: "POST",
url: '/artifact/upload/check-form/',
data: 'foo=bar',
dataType: "json",
success: function(data){
if(data['result'] == "true"){
$("#message").show();
$("#message").fadeIn(400).html('<span>'+data["message"]+'</span>');
setTimeout(function(){
$("#message").fadeOut("slow", function () {
$("#message").hide();
});
}, 1500);

fileUploadForm.submit();

}
else{
$("#message").show();
$("#message").fadeIn(400).html('<span">Response false</span>');
setTimeout(function(){
$("#message").fadeOut("slow", function () {
$("#message").hide();
});
}, 1500);
return false;
}
}
});
return false;
});
</script>

html:

<div id="message" style="background:black; width:400px; height:80px; display:none; color:white;">
</div>
<h1>Submit</h1>
<form action="{{upload_url}}" method="POST" target="" id="file_upload_form" enctype="multipart/form-data">
{% render_upload_data upload_data %}
<table>{{ form }}</table>
<p>
<input type="hidden" maxlength="64" name="myfileid" value="{{ myfileid }}" >
</p>
<p>
<input type="submit" style="display:none" id="true_upload_submit" value="Submit" />
</p>
<iframe id="upload_target" name="upload_target" src="" style="width:0;height:0;border:0px solid #fff;"></iframe>
</form>
<p>
<input type="submit" id="fake_upload_submit" value="Submit" />
</p>
<小时/>

编辑:

IE 的调试器显示 Object doesn't support this property or method用于:

    fileUploadForm.addEventListener("submit", function() {
alert("sent in iframe");
fileUploadForm.target = 'upload_target';
}, false);

因为使用了addEventListener,但没有再出现错误。 Firebug 很干净。在 Chrome 中:

检查表单中“无法加载资源”。这很有趣,因为 .../check-form/的结果是:

{
message: "Response = True"
result: "true"
}

所以对我来说看起来不错。还尝试了 data.message 而不是 data["message"] 但没有任何变化。

最佳答案

也许这个解决方案有点烦人,但这就是使用 Javascript 的乐趣所在。让浏览器和服务器之间的通信完全由 Javascript 决定,而不是由 HTML 决定。含义:

  • 当您编写 HTML 时,请省略操作;将提交按钮更改为常规按钮。
  • 通过 ajax 运行验证(就像现在所做的那样),如果验证成功,则调用一个新函数来管理表单提交。
  • 此表单提交函数将显示您想要的消息,然后将操作添加到表单,并运行 form.submit();

希望这有帮助

关于jquery - 推迟文件上传表单提交,直到经过验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4210655/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com