gpt4 book ai didi

jquery - 暂停表单提交以进行验证

转载 作者:行者123 更新时间:2023-12-03 22:53:15 26 4
gpt4 key购买 nike

我有一些表单,可以在 iframe 中上传文件。我想保留它的提交,直到我检查它是否对 ajax 有效。我怎样才能做到这一点 ?我的代码暂停提交并返回验证结果(当前只是一个返回“结果”:“true”的虚拟函数),但随后不执行“提交”操作。另外,在获取响应 200 状态后需要大约 2 秒才能显示响应数据,这是否正常?

这是我的 html:

<div id="message" style="background:black; width:400px; height:80px; display:none; color:white;">
</div>
<h1>Submit</h1>
<form action="{{upload_url}}" target="upload_target" method="POST" 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" id="file_upload_submit" value="Submit" />
</p>
<iframe id="upload_target" name="upload_target" src="" style="width:0;height:0;border:0px solid #fff;"></iframe>
</form>

Js:

$(function() {

$('#file_upload_submit').click(function(e){
e.preventDefault();
var fileUploadForm = document.getElementById('file_upload_form');

$.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);
$('#file_upload_form').attr('target','upload_target').submit(function(){
alert('Handler for .submit() called.');
return false;
});
}
else{
$("#message").show();
$("#message").fadeIn(400).html('<span">'+data["message"]+'</span>');
setTimeout(function(){
$("#message").fadeOut("slow", function () {
$("#message").hide();
});
}, 1500);
return false;
}
}
});
return false;
});

});

</script>

和链接: http://ntt.vipserv.org/artifact/

<小时/>

编辑

使用下面的代码,我可以执行验证,然后当结果为肯定时提交表单。现在,如果我对表单的目标进行硬编码,则不会显示我的警报,并且我非常确定上传不会执行(不幸的是,上传列表每 8 小时刷新一次,我会知道它是否在某个时间起作用)。如果未指定目标,则使用重定向上传文件,因此忽略整个“提交”事件监听器。

<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>

最佳答案

验证后,您注册了一个新的提交事件处理程序,但没有任何内容提交表单,因此您必须再次单击该按钮才能提交它。

您可以只提交表单,而不添加提交处理程序:

$('#file_upload_form').attr('target','upload_target').submit();

关于jquery - 暂停表单提交以进行验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4205574/

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