【发布时间】:2019-11-22 09:35:06
【问题描述】:
我正在将联系表 7 添加到一个页面,该页面还具有一个动态生成的 HTML 表,其中包含特定于该用户的数据。当该用户填写表单并提交时,我将表单设置为将 HTML 格式的电子邮件发回给我们。我需要将表格添加为电子邮件中的 HTML 元素,但我尝试过的方法都不起作用。假设一个非常基本的表格:
<table class="shop_table cart" id="carttable" name="carttable">
<tbody><tr>
<th>Company</th>
<th>Contact</th>
<th>Country</th>
</tr>
<tr>
<td>Ach zo</td>
<td>Hans Gruber</td>
<td>Germany</td>
</tr>
<tr>
<td>El Moctezuma</td>
<td>Juan Epstein</td>
<td>Mexico</td>
</tr>
</tbody>
</table>
我尝试将此 Javascript 事件侦听器添加到相关 WordPress 页面的 PHP 代码中,正如 Contact Form 7 的 documentation 所建议的那样:
document.addEventListener( 'wpcf7submit', function( event ) {
var carttable = document.getElementById("carttable").innerHTML;
document.getElementsByClassName("wpcf7-form").appendChild(carttable);
}, false );
但这会引发错误:
Uncaught TypeError: document.getElementsByClassName(...).appendChild is not a function
由于appendChild只能返回一个节点,我试了一下:
document.addEventListener( 'wpcf7submit', function( event ) {
var carttable = document.getElementById("carttable").innerHTML;
document.getElementsByClassName("wpcf7-form")[0].appendChild(carttable);
}, false );
但这返回了错误:
Uncaught TypeError: Failed to execute 'appendChild' on 'Node': parameter 1 is not of type 'Node'.
事实上,我不知道,鉴于插件的功能,这种方法是否会导致将表格的 HTML 添加到我们发送回给我们的表单详细信息的电子邮件中,因为它只收集在该特定表单的邮件设置中标识的特定字段。提交表单时是否有直接的方法将 HTML 附加到该电子邮件中?提前感谢您在此处提供的任何帮助。
编辑:根据要求,这是我在此页面上使用的 Contact 7 表单的 HTML:
<form action="/cart/#wpcf7-f8938-p5-o1" method="post" class="wpcf7-form" novalidate="novalidate">
<div style="display: none;">
<input type="hidden" name="_wpcf7" value="8938">
<input type="hidden" name="_wpcf7_version" value="5.1.3">
<input type="hidden" name="_wpcf7_locale" value="en_US">
<input type="hidden" name="_wpcf7_unit_tag" value="wpcf7-f8938-p5-o1">
<input type="hidden" name="_wpcf7_container_post" value="5">
</div>
<p><label> Your Name (required)<br>
<span class="wpcf7-form-control-wrap your-name"><input type="text" name="your-name" value="" size="40" class="wpcf7-form-control wpcf7-text wpcf7-validates-as-required" aria-required="true" aria-invalid="false"); background-repeat: no-repeat; background-attachment: scroll; background-size: 16px 18px; background-position: 98% 50%; cursor: auto;"></span> </label></p>
<p><label> Your Email (required)<br>
<span class="wpcf7-form-control-wrap your-email"><input type="email" name="your-email" value="" size="40" class="wpcf7-form-control wpcf7-text wpcf7-email wpcf7-validates-as-required wpcf7-validates-as-email" aria-required="true" aria-invalid="false"></span> </label></p>
<p><label> Company<br>
<span class="wpcf7-form-control-wrap your-company"><input type="text" name="your-company" value="" size="40" class="wpcf7-form-control wpcf7-text" aria-invalid="false"></span> </label></p>
<p><label> Phone<br>
<span class="wpcf7-form-control-wrap cell"><input type="tel" name="cell" value="" size="40" class="wpcf7-form-control wpcf7-text wpcf7-tel wpcf7-validates-as-tel" aria-invalid="false"></span> </label></p>
<p><label> Your Message<br>
<span class="wpcf7-form-control-wrap TestTextArea"><textarea name="TestTextArea" cols="40" rows="10" class="wpcf7-form-control wpcf7-textarea wpcf7-validates-as-required" aria-required="true" aria-invalid="false"></textarea></span> </label></p>
<p><input type="submit" value="Send" class="wpcf7-form-control wpcf7-submit"><span class="ajax-loader"></span></p>
<div class="wpcf7-response-output wpcf7-display-none"></div></form>
【问题讨论】:
-
你的表单有
wpcf7-form这个类吗?您没有显示任何表单代码 -
是的,这是表单的默认类——在我的使用中,开始标签为:
<form action="/cart/#wpcf7-f8938-p5-o1" method="post" class="wpcf7-form" novalidate="novalidate" _lpchecked="1"> -
你能把完整的表格贴在原帖上吗?
-
我认为这将有助于诊断问题
-
第二个错误是有道理的,你得到的 innerHTML 应该是一个字符串,而不是一个节点,所以它会抛出一个
TypeError
标签: javascript php html wordpress contact-form-7