Javascript 按下提交按钮后更改表单值

Javascript 按下提交按钮后更改表单值,javascript,jquery,html,ckeditor,Javascript,Jquery,Html,Ckeditor,[编辑]经过深入研究,我发现问题在于如何将CKEditor集成到我的页面中。在这种情况下,简单而明显的方法确实有效,正如公认的答案所述 嗨 在按下submit按钮之后,但在实际提交之前,我需要更改表单的值 我尝试连接到表单的“submit”事件,并手动更改其中的文本字段值,但看起来这实际上并没有更改提交的值 有什么想法吗?您需要阻止默认的提交操作,然后自己手动重新提交表单: $('form').submit(function(e) { e.preventDefault(); /

[编辑]经过深入研究,我发现问题在于如何将CKEditor集成到我的页面中。在这种情况下,简单而明显的方法确实有效,正如公认的答案所述

在按下submit按钮之后,但在实际提交之前,我需要更改表单的值

我尝试连接到表单的“submit”事件,并手动更改其中的文本字段值,但看起来这实际上并没有更改提交的值


有什么想法吗?

您需要阻止默认的提交操作,然后自己手动重新提交表单:

$('form').submit(function(e) {
    e.preventDefault();

    // do your processing

    this.submit(); // call the submit function on the element rather than 
                   // the jQuery selection to avoid an infinite loop
});

您是否尝试在submit按钮上的click JavaScript事件上添加函数并更改值?
它可能会工作,因为客户端脚本将首先执行

我很好奇您的声明,即提交处理程序不适合您。对我来说是的。多年来,我一直使用它在发送表单之前填充隐藏字段;也适用于其他表单字段

示例():

HTML:

在Windows上测试并使用IE6和IE7,在Linux上测试并使用Chrome、Firefox和Opera


更新:根据下面的评论,您正在使用jQuery。使用jQuery也可以很好地解决所有问题:

$('#theForm').submit(function() {
  var txt = $('#txtSearch');
  txt.val("updated " + txt.val());
});

在同一组浏览器上测试和工作。使用更开放的搜索而不是
id
,并且仍然有效。

这不是批评,只是我的好奇,但为什么你要在用户提交操作和服务器接收数据之间操纵数据?@David Thomas-我正在将CKEditor添加到某个(现有)项目中。问题是,我需要在CKEditor的输出前面加上一些东西,使其与项目的其余部分配合良好。我试过询问其他方法如何做到这一点,但现在只捕获提交事件并手动添加代码是最简单的(我还没有得到其他问题的答案)。@David:form元素上的
submit
函数不会触发提交处理程序。(注意它是
this.submit();
而不是
$(this.submit();
)。@T.J.,是的,它可能很简单,但我没有想到这样做;所以它仍然值得+1教我一些我不知道的东西=)“你需要阻止默认的提交操作,然后自己手动重新提交表单”我想你不会这么做。我认为OP对提交处理程序的理解是错误的。在发送表单之前,我已经用它填充隐藏字段很多年了。我不知道为什么它对我不起作用。可能我只是做错了什么。但是使用lonesomeday的方法生成的代码与我工作前的代码相同,所以谢谢!好吧,忘了我之前的信息吧——T.J.Crowder是对的,不需要重新提交表格就可以完成。此外,此解决方案也给我带来了一些问题(与Cookie中的无效令牌有关-我不知道究竟是什么原因造成的)。如果用户通过单击按钮提交表单,但如果表单是以其他方式提交的(例如按Enter键),则此解决方案将起作用,不会的。嗯,我没有考虑过使用enter提交表单:)好的,我再次检查了一下,用你的代码就可以了。区别-我使用jQuery获取和设置文本框(即,
$('.txtSearch').val(newval)
)。将其更改为此解决了它:
$(“.txtSearch”)[0]。value=newval
。“知道有什么区别吗?”编辑:不,应该归结到同一件事上。我将我的示例翻译为使用jQuery处理所有内容,它仍然有效,请参见上文。好的,请参见问题中的更新。问题是,我有一半的时间使用CKEditor进行测试,一半的时间没有(显然没有意识到!),这意味着你的方法,我的方法,每个人的方法都有效,但只有一半的时间!感谢您在任何情况下提供的帮助。您会遇到一个问题:如果用户按下返回键,他们将在表单中看到更改后的值,而不是他们输入的值。您可以通过在onSubmit事件中执行以下操作来解决此问题:onSubmit=function(){var oldText=elem.value;elem.value=“updated”+elem.value;setTimeout(function(){elem.value=oldText;},0);}
window.onload = function() {

  document.getElementById('theForm').onsubmit = function() {
    var txt = document.getElementById('txtSearch');
    txt.value = "updated " + txt.value;
  };
};​
$('#theForm').submit(function() {
  var txt = $('#txtSearch');
  txt.val("updated " + txt.val());
});