表单在第二次提交调用时不会提交

时间:2011-05-17 作者:Ash

我已经为以下问题纠结了一个多星期了,请原谅我的冗长描述。我希望它尽可能准确和清晰:

我正在使用“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或插件有关。

2 个回复
最合适的回答,由SO网友:Ash 整理而成

处理此插件中提交的值的php函数首先检查按钮的值isset. 当使用原始提交时,它是。使用时preventDefault() 然后打电话submit() 事实并非如此,因此php不会处理提交的表单,而是重建表单。为了解决这个问题,我刚刚添加到isset() 检查横向/纵向值是否为真。这就成功了。

SO网友:Scott

我觉得这个问题不属于这里,但永远不会少。

好的,请尝试以下逻辑:

<script>
var wasGoogleFetchSuccess = 0;

$(\'#simplr-reg\').submit(function() {

    if(wasGoogleFetchSuccess == 1) {
        return true; // I can now submit form as normal
    } else {
        goDoGoogleMapAddressSearch();
        return false; // dont submit form this time round
    }

});

function goDoGoogleMapAddressSearch() {
    //Do google map search
    //On success or completion do the following:
    $("blah blah blah").success(function() { // Just an example
        wasGoogleFetchSuccess = 1;
        $(\'#simplr-reg\').submit();
    });
}
</script>

结束

相关推荐

GPL and plugins

插件开发中心说:“您的插件必须与GPLv2兼容。”。但我发现Topsy插件在GPLv3下。http://www.gnu.org/licenses/rms-why-gplv3.html 声明GPLv2和GPLv3不兼容。那么这应该被允许吗?我想使用Topsy插件中的一些代码。那么,我应该在GPLv2或GPLv3下发布插件吗??