我已经为以下问题纠结了一个多星期了,请原谅我的冗长描述。我希望它尽可能准确和清晰:
我正在使用“simplr注册表”插件注册新用户。我需要在表单中添加一个“地址”字段供用户填写,当单击提交按钮时,地址应发送到google maps API并接收回纬度和经度,然后将其与用户的其余数据一起保存在wpdb中。为了实现这一点,我在构建html表单的php函数中添加了以下内容:
-地址输入字段
-lat和;long-jquery函数,响应submit按钮,应该在按钮点击后,但在表单实际提交并由插件的php函数处理之前完成它的工作。
由于使用Google Maps API是异步的,因此我需要执行以下操作:
编写一个响应提交单击的函数
该函数应防止表单被提交,并调用另一个执行谷歌地图功能的函数,完成后提交表单
问题在于第二次提交。这根本不会发生
我尝试了不同的方法(使用jquery):
一个提交函数,它使用一个标志来调用自己,告诉第一次迭代不要提交,第二次迭代要提交。在提交第二次迭代之前,代码运行良好,但第二次迭代根本不起作用
-一个调用“this.submit()”的提交函数。同样,“this.submit()”不会导致表单提交
-一个点击功能,它应该响应被点击的提交,执行google操作,然后调用提交功能。在这里,甚至单击功能都不会启动。
// This is the button\'s definition:
$form .= apply_filters(\'simplr-reg-submit\', \'<input type="submit" name="submit-reg" id="submit-reg" value="Register" class="submit button">\');
// This is the php code that starts handling the submitted form
if(isset($_POST[\'submit-reg\'])) {
下面是我尝试的一个例子:
function codeAddress(callback)
{
// do the google stuff
// when finished submit the form
$(\'#simplr-reg\').get(0).submit();
// it\'s all being done except for the submit part
}
$(\'#simplr-reg\').submit(function(event)
{
codeAddress(function(success){}); //callback from googlemaps
event.preventDefault();
}
// Here\'s a simplified example:
$(\'#simplr-reg\').submit(function(event)
{
this.submit(); //doesn\'t cause the form to submit
event.preventDefault();
});
如果我不使用event。preventDefault()并在第一次迭代中提交,提交很好。
我在stackoverflow上的人的帮助下试图解决这个问题,但没人能找到问题所在,所以我猜这与WordPress或插件有关。