0

我正在使用完全相同的 MailChimp PHP/AJAX 订阅处理表单 -成功后的明文值?- 但我完全不知道如何在成功后真正让表单域保持整洁。

显然,Felix 在这里推荐了什么 -成功后的明文值?- 代码仅在文档加载时存在 span 元素时才有效,如果使用 Ajax,则必须在完成后调用 if 语句。

有人可以帮我吗?用户成功完成后如何清除表单域?

这是代码:

    <?php  
    // store-address.php

    function storeAddress(){

        // Validation
        if(!$_GET['email']){ return "No email address provided"; } 

        if(!preg_match("/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*$/i", $_GET['email'])) {
            return "Email address is invalid"; 
        }

        require_once('MCAPI.class.php');
        // grab an API Key from http://admin.mailchimp.com/account/api/
        $api = new MCAPI('my-api-key');

        // grab your List's Unique Id by going to http://admin.mailchimp.com/lists/
        // Click the "settings" link for the list - the Unique Id is at the bottom of that page. 
        $list_id = "my-list";

        if($api->listSubscribe($list_id, $_GET['email'], '') === true) {
            // It worked!   
            return 'Success! Check your email to confirm sign up.';
        }else{
            // An error ocurred, return error message   
            return 'Error: ' . $api->errorMessage;
        }

    }

    // If being called via ajax, autorun the function
    if($_GET['ajax']){ echo storeAddress(); }
    ?>

表格代码:

    <form action="<?=$_SERVER['PHP_SELF']; ?>" id="signup" class="subscribe" method="get">

        <fieldset>
            <input type="text" id="email" name="email" placeholder="your email address" />
            <input type="submit" name="submit" value="Send it" />
        </fieldset>
    </form>
    <p id="response"><? require_once('inc/store-address.php'); if($_GET['submit']){ echo storeAddress(); } ?></p>
    <script type="text/javascript" src="/js/prototype.js"></script>
    <script type="text/javascript" src="/js/mailing-list.js"></script>

邮件列表 javascript 代码:

    // Load Events Listeners
    Event.observe(window, 'load', init, false);

    function init(){
        Event.observe('signup','submit',storeAddress);
    }

    // AJAX call sending sign up info to store-address.php
    function storeAddress(event) {
        // Update user interface
        $('response').innerHTML = 'Getting email address...';
        // Prepare query string and send AJAX request
        var pars = 'ajax=true&email=' + escape($F('email'));
        var myAjax = new Ajax.Updater('response', 'inc/store-address.php', {method: 'get', parameters: pars});
        Event.stop(event); // Stop form from submitting when JS is enabled
    }
4

2 回答 2

1

jquery 表单resetForm()插件有. 只是在说'。

于 2013-06-14T08:17:44.597 回答
1

有两种解决方案。

不太优雅的方法是创建一个手动重置每个表单字段值的 JS 函数。

更好的方法是在表单中使用 ID 存储隐藏的重置输入:

<input type="reset" id="blagh" style="display:none"/>

只需使用 jQuery '单击'它:

$('#blagh').click();
于 2013-06-14T08:13:43.780 回答