我已经有一段时间没有表达我对 Wufoo 的爱了。哦,甜蜜的 Wufoo。你美味的界面让表单构建变得容易,不,是一种乐趣。好吧,我不是诗人。我是一个解决方案整理者。
在使用 Wufoo 创建表单时,您会在 Wufoo.com 上获得一个特殊的 URL,您的表单驻留在该 URL 上。您可以将人们送到那里填写表单,但更常见的是,您将表单直接嵌入到您的网站中。您可以通过他们的主题管理器进行相当好的设计控制,或者通过自定义 CSS 进行完全控制。但是这些嵌入式表单通过 iframe 进来,或者通过提供的 JavaScript 代码进来,这些代码最终也会变成 iframe。因此,您没有标记控制权。(尽管如果您想让 HTML 做您自己的处理,它们有 模板)。这基本上是一件好事。这意味着您的表单将正确提交给 Wufoo,而不会让您有机会搞砸任何事情,并允许 Wufoo 正确处理它,并让您访问 Wufoo 所做的一切其他惊人功能。
现在假设我们想自动填充表单中的某些字段。 我们没有标记控制权,因此我们无法调整值. 而且由于表单位于 iframe 中,我们甚至无法使用 JavaScript 访问这些字段。幸运的是,Wufoo 提供了解决方案。如果您通过 JavaScript 嵌入方法(强烈推荐)进行嵌入,您可以传递一个defaultValues参数来自动预填充字段!
<script type="text/javascript">
var x7x2q5 = new WufooForm();
x7x2q5.initialize({
'userName':'Wufoo-User-Name',
'formHash':'abc1234',
'autoResize':true,
/* Autofill Magic! */
'defaultValues':'field8=PREFILL-VALUE-HERE',
'height':'562',
'ssl':true});
x7x2q5.display();
</script>
注意field8名称?每个字段都有一个像这样的编号名称。您可以通过进入表单的“代码”区域并单击“API 信息”按钮来找到这些值
因此,要在此示例中额外预填充电子邮件,您将使用“[电子邮件保护]”。您可以通过使用“&”分隔它们来预填充多个字段:“[电子邮件保护]&field6=name”。
用例场景
多次类似提交
对于新的 Digging Into WordPress 书籍,我们有一个用于 提交勘误表 的表单。该表单要求您提供页码、勘误表、姓名和电子邮件。我们已经有一些人非常慷慨地提交了很多很多小修正。每次他们提交表单时,都需要输入他们的姓名和电子邮件地址,这可能非常令人讨厌/重复。
因此,在这种情况下,我们需要使用来自上一次提交的值预填充表单。这引入了另一个小问题……我们如何才能访问刚刚提交的数据以便在预填充中使用?Wufoo 有一个 完整的 API,但现在我们不需要那么多。在编辑我们的表单时(在“表单设置”下),我们可以选择显示文本或重定向到网站。通常,只显示一些文本是一种显示确认的好方法,但我们将在此处使用重定向。重定向 URL支持模板,这意味着我们可以将一些特殊代码放在其中,以便将数据传递回我们自己的网站。
在勘误表表单的情况下,我们希望他们的姓名和电子邮件自动填写,以方便额外提交。因此,在查找了这些内容的字段 ID 后,我们的重定向 URL 将如下所示
http://digwp.com/book/errata/?field3={entry:Field3}&field4={entry:Field4}&field5={entry:Field5}
提交后,结果如下
http://digwp.com/book/errata/?field3=Chris&field4=Coyier&[email protected]
现在,在我们自己网站上的勘误表页面上,我们将尝试在页面加载时从 URL 中提取这些值
<?php
function clean($value) {
// If magic quotes not turned on add slashes.
if(!get_magic_quotes_gpc())
// Adds the slashes.
{ $value = addslashes($value); }
// Strip any tags from the value.
$value = strip_tags($value);
// Return the value out of the function.
return $value;
}
$firstName = clean($_GET["field3"]);
$lastName = clean($_GET["field4"]);
$email = clean($_GET["field5"]);
?>
那里的 清理函数 只是为了尝试防止恶意内容被输入 URL。
现在,在我们的 JavaScript 嵌入中,我们将回显这些 PHP 变量以进行预填充
'defaultValues':'field3=<?php echo $firstName; ?>&field4=<?php echo $lastName; ?>&field5=<?php echo $email; ?>',
应该这样就可以了!当然,您需要提供一些有关表单成功发送的反馈,因此只需检查其中一个变量是否存在并吐出一个消息
<?php if ($firstName) { ?>
<div style="background: #d7ffd6; border: 5px solid #39c235; -moz-border-radius: 20px; -webkit-border-radius: 20px; padding: 20px; margin: 0 0 25px 0; color: black; text-align: center; font: 18px Georgia, Serif;">
Thank you! We'll take a look and get 'er fixed for the next update.
</div>
<?php } ?>
传递(隐藏)信息
在 Are My Sites Up 上,我们有一个用于支持请求的 Wufoo 表单。如果我们知道用户的帐户 ID 是什么,那么我们可以更轻松地查找他们帐户的信息。但是人们不知道他们的帐户 ID 是什么。这并不重要。我们还有一个特定的设置,在进行支持请求时了解该设置非常重要。因此,在 Wufoo 中创建此表单时,我们将为此数据创建两个字段,但只需使用CSS 布局关键字,我们就可以将这些字段隐藏起来,以免显示给用户。
但即使它们被隐藏,也不意味着它们的不会提交!我们仍然可以自动填写它们。AMSU 是一个 Ruby on Rails 应用程序,在这个特定视图中,我可以访问此用户数据,因此我只是在嵌入表单时将它输出到 defaultValues 参数中
'defaultValues':'field6=<%= current_user.id %>&field8=<%= current_user.timeouts_enabled %>',
一点点行为监控
Wufoo 他们自己 在他们的支持表单上使用了这种技术。他们想知道用户在打开联系表单时位于网站的哪个页面(当时一定是在弹出窗口中)。他们使用了一些 PHP 来查看 URL 并将其插入表单中的隐藏字段中。重点是看看用户是否来自帮助区域(证明他们尝试过自己搜索问题)或没有。
如果您想了解用户在到达您的表单时来自哪里,您可以预填充 HTTP_REFERRER 的隐藏字段,这可能会很酷
$_SERVER['HTTP_REFERER']
它很容易被欺骗,而且通常不可靠,但对于像这样的一个小表单来说,它仍然可能收集一些有用的信息。
很棒的文章,Chris!
我也在默默地思考着 Wufoo。
因为它有点被遗忘了,所以我有点把它关闭了,但也许我会再次研究它(这次会更深入一些)。
谢谢,
TeMc
很棒的技巧,谢谢
这篇文章对我来说非常有用,因为我刚开始使用 wufoo。
谢谢!
老兄,
你是最棒的!
Chris,感谢你写了这篇很棒的教程,详细介绍了这个功能!我们很高兴看到你找到了如此好的用法。
我很乐意,Kevin。
我很高兴在一段时间前发现了 wufoo,但把它放在一边有一段时间了。我以为我想要依靠 wufoo 来构建表单而不是自己动手,这让我很胆怯。这篇文章再次激发了我对它的兴趣。没意识到他们有一个性感的 API 与之相伴。谢谢!
为什么你建议使用 JS 嵌入方法嵌入 Wufoo 表单?如果你使用的是 iframe,非 JS 用户仍然可以使用表单吗?
如果这是一个大问题……那么你可以使用 iframe。我越来越不关心每天迎合非 JavaScript 用户。如果你必须抱怨,那你就抱怨吧,但这就是我的感受。屏幕阅读器论点站不住脚,因为大多数屏幕阅读器都能很好地处理 JavaScript。移动浏览器也能很好地处理它,即使是非常老的浏览器也能很好地处理 JavaScript。
记录在案,JS Wufoo 嵌入方法之所以推荐,是因为它的包装器可以在需要时扩展,例如,当表单填写错误并且需要插入有关出现错误的说明/信息时。使用 iframe 方法,当发生这种情况时,提交按钮会被切断,使表单完全无法提交。不好。
天啊,感谢提醒。我希望我在部署几个 Wufoo 表单之前就知道这个问题。
听起来最好的解决方案可能是将 iframe 表单包含在 noscript 标记中作为后备方案,然后也包含 JS 版本?
关于迎合非 JS 用户,我之所以这样做是因为我自己也是其中之一。我只有在访问的网站中一小部分才会启用 JS,如果我绝对没有必要,我会离开一个没有 JS 无法正常工作的网站。
这是一个很棒的想法。关于 noscript 标签 + JS
它们很棒!
哇!克里斯,很棒的文章,我一直都在使用 wufoo,几乎从他们正式推出开始就一直在使用,但一直没意识到这是可能的。
谢谢!
我喜欢 Wufoo,所以这很棒!非常感谢你的帖子。
wufoo,wufoo,我们爱 wufoo。生存还是毁灭,这是一个问题。要不要用 wufoo,这不是问题。如果沉默是爱情的滋养,那么 wufoo 就是表单的滋养。
好吧,我也不是诗人!
很棒的文章,克里斯!我本人也是 Wufoo 的忠实粉丝,这些都是突破一些人认为的“局限性”的极好练习。
你好克里斯,
我一直都在查看 WuFoo,用于我目前正在进行的项目,因为你是 WuFoo 大师!你知道这是否可行吗?
我能否从另一个页面(例如:WordPress 帖子的标题)传递一个变量,并获取该值以用于 Wufoo 表单?
干杯
哇,我一直都不知道 WuFoo... 看起来很酷。虽然,不是免费的(个人可以免费使用 3 个表单)。
很棒的文章,一如既往!
有没有办法为预填充字段设置点击函数,以便预填充值消失?
例如:如果字段 1 是名字,并且我添加“First”作为预填充值,有没有办法在用户点击字段内部时自动清除它(就像你可以在常规 html 表单中那样)?
谢谢!
Jacob
附注:如果你还没有“深入 WordPress”,那就去买一本吧!它很棒!
那是在 iframe 内部,因此你无法从你的端点使用 JavaScript 访问它。你可能需要联系 Wufoo 并看看他们对此有何说法。这可能仅仅被认为是该字段所需的“提示”,他们已经提供了带有提示框的解决方案,但是将其放在字段内部可能更好。
同意!我将联系 Wufoo 并报告结果。它会添加“一些特殊的东西”。
干杯!
-Jacob
事实证明,Wufoo 尚未支持此功能,正如预期的那样。但他们正在考虑在将来的更新中加入此功能!
同时,我不确定是否要使用预填充值。对于最终用户来说可能很麻烦,不是吗?
一直在与我的客户一起大量使用 wufoo。而且我永远不会再回头。我同意克里斯的观点,javascript 方法非常适合自动填充表单。
主要原因是,<IE8 会做一些奇怪的事情。并且使用 iframe 最终会导致在早期 IE 浏览器上丢失提交按钮。
(对于非营利性捐赠表单来说不是好事!)
主题可以包含你自己的完整 CSS。效果很好。
感谢你介绍这个主题!
哇!关于 Wufoo 的好文章。我从去年开始在我的网站上使用 Wufoo,但我决定使用 WordPress 插件。今年,我决定尝试使用 Wufoo。你的帖子真的可以帮助我使用 Wufoo 来增强我的表单!赞!