Javascript 是否有一个「;“提交后”;jQuery选项?

Javascript 是否有一个「;“提交后”;jQuery选项?,javascript,jquery,forms,form-submit,Javascript,Jquery,Forms,Form Submit,我有一个表单可以上传一个文件并在页面上指向一个iframe。当用户单击submit时,我希望文件内容被“清除” 我试过这个 $('#imageaddform').submit(function(){ $('#imagefile').val(''); }); 但它在提交前会清除表单,因此不会上载任何内容 提交后如何清除?您可以执行以下操作: $('#imageaddform').submit(function(){ setTimeout(function() { $('#im

我有一个表单可以上传一个文件并在页面上指向一个iframe。当用户单击submit时,我希望文件内容被“清除”

我试过这个

$('#imageaddform').submit(function(){
    $('#imagefile').val('');
});
但它在提交前会清除表单,因此不会上载任何内容


提交后如何清除?

您可以执行以下操作:

$('#imageaddform').submit(function(){
  setTimeout(function() {
    $('#imagefile').val('');
  },100);
});
$('#imageaddform').submit(function(e) {
    e.preventDefault(); // don't submit multiple times
    this.submit(); // use the native submit method of the form element
    $('#imagefile').val(''); // blank the input
});
$('#imageaddform').submit(function(e) {
    e.preventDefault(); // don't submit multiple times
    this.submit(); // use the native submit method of the form element

    setTimeout(function(){ // Delay for Chrome
        $('#imagefile').val(''); // blank the input
    }, 100);
});

如果没有绑定其他处理程序,则可以执行以下操作:

$('#imageaddform').submit(function(){
  setTimeout(function() {
    $('#imagefile').val('');
  },100);
});
$('#imageaddform').submit(function(e) {
    e.preventDefault(); // don't submit multiple times
    this.submit(); // use the native submit method of the form element
    $('#imagefile').val(''); // blank the input
});
$('#imageaddform').submit(function(e) {
    e.preventDefault(); // don't submit multiple times
    this.submit(); // use the native submit method of the form element

    setTimeout(function(){ // Delay for Chrome
        $('#imagefile').val(''); // blank the input
    }, 100);
});

你是如何提交表格的?如果这是正常的表单帖子,那么页面将不存在。在这种情况下,我想知道你是否希望在页面刷新之前清除表单,这样当用户返回时,他就不会看到填充的值

如果表单是由ajax提交的,那么您可以

function(){
 $('form1')[0].submit();
 clearForm();
}

我错过了这个问题吗?

Lonesomeday的解决方案对我来说很有效,但对于Google Chrome,我发现它仍然会提交空表单数据,除非我添加这样的超时:

$('#imageaddform').submit(function(){
  setTimeout(function() {
    $('#imagefile').val('');
  },100);
});
$('#imageaddform').submit(function(e) {
    e.preventDefault(); // don't submit multiple times
    this.submit(); // use the native submit method of the form element
    $('#imagefile').val(''); // blank the input
});
$('#imageaddform').submit(function(e) {
    e.preventDefault(); // don't submit multiple times
    this.submit(); // use the native submit method of the form element

    setTimeout(function(){ // Delay for Chrome
        $('#imagefile').val(''); // blank the input
    }, 100);
});


因为这是一个猜测,所以没有给出答案:
$('iframe').load(function(){$('#imagefile').val('');})我没有使用jquery表单发回。但在我点击按钮之后,在阅读之后,但在下一页加载之前,您关于捕获的看法是正确的。它的目标是iframe,不,浏览器窗口永远不会重新加载。页面不会刷新。它的目标是一个从未想过会出现这种情况的人。您可以使用上面发布的计时器方法。或者我可以告诉你一个解决办法。使用隐藏变量,将您的详细信息放入其中,然后提交该字段。同时明确了主要形式。因此,这将使窗体看起来已清除。这只是一个权宜之计,但却是肮脏的解决方案大卫在对这个问题的评论中发布了一个解决方案。到目前为止,这是最适合我的解决方案。@David这是一个好主意,并且完成了工作。但是我喜欢另外两个答案
setTimeout和e.preventDefault()
都与任务相关,比如提交后退出,而不是iframe加载后退出。希望这些也能奏效。我没有投票,因为我没有测试那些不提交表单而替换页面的表单?如果还有其他绑定处理程序呢?这是否会创建一个无休止的提交循环,在循环中调用此回调?@chamo否,因为调用本机表单元素的
submit
函数不会调用jQuery处理程序。Gondrup。。。非常感谢您发布Chrome的解决方案…在找到您的解决方案之前,我一直以为我疯了。Chrome在提交之前正在清除表单。刚刚测试过,Chrome似乎不再需要这种黑客攻击。对于推送更新,我不确定向后兼容性对Chrome有多重要。我认为这取决于预期的可靠性。。对于某些用户来说,使用此黑客比破坏重要功能更好仍然需要提示。现在(Chrome 61)我试着在表单提交后执行
location.reload()
(它提交到
target=“\u blank”
),没有超时它就无法工作。一台速度慢的计算机需要比这更大的时间才能发送带有代码的请求,这取决于现代PC的使用情况,这不是标准的,也不是有用的。有时有效,有时无效。@WHK,事实上,即使是最慢的计算机也能正确地执行此操作,而且它始终有效,因为此操作所需的只是一个坏掉的调用堆栈,仅此而已。这就像用一块砖头堵住房门一样,使用一把正确的钥匙,这两种方法都可以,但砖块不是用来锁门的,为什么使用:e.preventDefault()。