【问题标题】:Preventing page reload upon form submission to database防止在表单提交到数据库时重新加载页面
【发布时间】:2017-05-15 03:14:46
【问题描述】:

我看到了一些与我的问题相似但不完全相同的问题,所以如果这是重复的,对不起。我正在使用 javascript hide 和 show 函数尝试在提交表单后隐藏“谢谢”消息,该表单将信息提交到数据库,并且工作正常,但我无法阻止页面转到下一页。它总是转到/about_you。

我尝试在表单顶部使用 onsubmit = "return false",它完全阻止了表单提交。已尝试 onclick="return false"。我不太确定如何实现 jquery 函数。对jquery一无所知,所以如果答案涉及jquery,请尽可能详细地告诉我。

我只是试图让页面加载后“感谢您完成调查”。这是一个单页网页,因此转到该网页的另一个重复版本是不可行的。非常感谢任何帮助。谢谢。

这是javascript函数。

function hideyou(){
    document.getElementById("about_you_form").style.display = "none";
    document.getElementById("thank_you").style.dislay = "block";
}

这是提交

<input id="about_you_submit" type="submit" onclick="hideyou();" value="Submit">

这是我在 ruby​​ 中输入的代码。

post '/about_you' do

fname = params[:fname]
lname = params[:lname]
address = params[:address]
address2 = params[:address2]
city = params[:city]
state = params[:state]
zip_code = params[:zip_code]
email = params[:email]

db.exec("INSERT INTO public.users (fname, lname, address, address2, city, state, zip_code, email)
VALUES ('#{fname}', '#{lname}', '#{address}', '#{address2}', '#{city}', '#{state}', '#{zip_code}', '#{email}')")  

【问题讨论】:

  • target=
    标签中隐藏或未隐藏的 iframe
  • 我很想知道多种方法来做到这一点。请详细说明你的意思。如果我有一个标有 fname 的表单,我会将...target=fname 放在提交标签内?

标签: javascript jquery html ruby forms


【解决方案1】:

我认为您正在尝试提交表单而不刷新页面。现在您可以提交表单,数据被发送并保存到数据库中,但是javascript:

document.getElementById("about_you_form").style.display = "none";
document.getElementById("thank_you").style.dislay = "block";

无法执行并完成其工作,因为浏览器被重定向(您正在向 /about_you 发出请求)。您需要做的是简单的 AJAX 请求(在后台发送数据,浏览器停留在同一页面,并在成功发送和服务器响应后 - javascript 启动)

将您的 hideyou 函数更改为:

function hideyou(e, btn){
  e.preventDefault();
  var form = $(btn).parents('form');

  $.ajax({
    type: "POST",
    url: $(form).attr('action'),
    data: $(form).serialize(),
    success: function(response){
      document.getElementById("about_you_form").style.display = "none";
      document.getElementById("thank_you").style.dislay = "block";
    }
  });

}

然后改变

<input id="about_you_submit" type="submit" onclick="hideyou();" value="Submit">

<input id="about_you_submit" type="submit" onclick="hideyou(event, this);" value="Submit">

【讨论】:

  • 您可以添加任何内容来帮助我了解那里发生了什么。 url、data、serialize...我假设成功:基本上是(onsuccess 运行此函数)和 $(btn).parents('form),基本上是整个事情,我不熟悉。但效果很好,非常感谢!
  • 好的。我一直在玩它。我通过运行隐藏感谢消息的隐藏功能来启动页面。您的代码运行良好,只是它没有加载thank_you 消息。一开始我在页面的最底部有 hideThankYou 功能,并且隐藏有效。该隐藏功能是否会阻止您的代码显示thank_you id?这是那个功能
  • 默认情况下,您不必使用函数来隐藏thank_you消息。而是:在 id="thanks_you"(或其他任何名称)的 html 元素上添加内联样式 style="display: none"。这样,默认情况下您就没有单独的 javascript 来隐藏消息。
  • 那是我从未考虑过的事情。但它没有显示的原因是一个小错字。 “thank_you”getElementById 具有“显示”而不是显示。直到今天我才看到它。但是您的方式似乎更有效,更少hackey。谢谢你的一切。
猜你喜欢
  • 2015-01-17
  • 1970-01-01
  • 1970-01-01
  • 2019-06-24
  • 2017-06-26
  • 2012-12-20
  • 2015-07-04
  • 1970-01-01
  • 2020-10-16
相关资源
最近更新 更多