1

PHPがajax$.get呼び出しを介して返されたMySQLテーブルデータに基づいて、デフォルトの入力値を持つフォームが追加されるdivを定義しました。

divは次のようになります。

<div id="esfContainer1">
</div> <!--end esfContainer1 div-->

divは、bodyタグに対して絶対的に配置されます。

フォームの検証に関連付けられたスクリプトは、フォームの呼び出しが行われているメインページに含まれているときに壊れたため、PHP出力の$formContentに移動しました。

PHP出力に含まれるフォーム検証および送信スクリプトは次のとおりです。

<script type="text/javascript">

var senderName     = $("#sendName");
var senderEmail    = $("#fromemailAddress");
var recipientEmail = $("#toemailAddress");
var emailError     = $("#esemailerrorDiv");

senderName.blur(checkName);
senderEmail.blur(checkSEmail);
recipientEmail.blur(checkREmail);

function checkName() {
if (senderName.val() == "YOUR NAME") {
        $("#esemailerrorText").html("Please provide your name");
        $(emailError).removeClass("esemailError");
        $(emailError).addClass("esemailErrorNow");
        $(emailError).fadeIn("fast","linear");
        $(emailError).delay(2000).fadeOut("slow","linear");
        return false;
    } else {
        return true;
    }
};

function checkSEmail() {
    var a      = senderEmail.val();
    var filter = /^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/;

    if (filter.test(a)) {
        return true;
    } else {
        $("#esemailerrorText").html("Please enter a valid email address");
        $(emailError).removeClass("esemailError");
        $(emailError).addClass("esemailErrorNow");
        $(emailError).fadeIn("fast","linear");
        $(emailError).delay(2000).fadeOut("slow","linear");
        return false;
    }
};

function checkREmail() {
    var a      = recipientEmail.val();
    var filter = /^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/;

    if (filter.test(a)) {
        return true;
    } else {
        $("#esemailerrorText").html("Your friend\'s email is invalid");
        $(emailError).removeClass("esemailError");
        $(emailError).addClass("esemailErrorNow");
        $(emailError).fadeIn("fast","linear");
        $(emailError).delay(2000).fadeOut("slow","linear");
        return false;
    }
};

$("#emailForm").submit (function() {
    if (checkName() && checkSEmail() && checkREmail()) {

        var emailerData = $("#emailForm").serialize();
        $.get("style.php",emailerData,processEmailer).error("ouch");

        function processEmailer(data) {
            if (data=="fail") {
                return false;
            } else if (data=="pass") {
                $("#c1Wrapper").fadeOut("slow","linear");
                $("#confirmation").fadeIn("slow","linear");
                $("#esfContainer1").delay(2000).fadeOut("slow","linear");
                $("#backgroundOpacity").delay(2000).fadeOut("slow","linear");
                return false;
            }
        };
    return false;
    };
    return false;
}); 

上記の送信関数を「returnfalse」でスプラッタ爆撃しました。送信関数は、$。getを実行するのではなく、処理中のPHPスクリプトを開いているだけだからです。Firebugで送信関数を監視すると、processEmailerが未定義であることが報告されます。

私はこれに非常に新しいです。私は、ajaxコールバックがsubmit関数内で定義されているため(そしてprocessEmailer関数がajax呼び出しのすぐ下で定義されているため)、定義に問題はないと想定していました。

助けてくれてありがとう。

4

1 に答える 1

0

関数ステートメントに閉じ込められました。関数宣言(吊り上げられる)はブロック内(if / else / for body)では許可されておらず、そこに表示されている場合、動作は定義されていません。Firefoxはそれらを条件付きで定義します。あなたの場合、呼び出しでそれを使用した後、それがあった場所で、 vsのようになります。$.getundefinedvar functionName = function() {}function functionName() {}

これを解決するには、単純にifブロックの外側(またはコールバック全体の外側)に配置します。ところで、.error("ouch")動作しません、あなたは関数を渡す必要があります。

$("#emailForm").submit (function() {
    if (checkName() && checkSEmail() && checkREmail()) {
        var emailerData = $("#emailForm").serialize();
        $.get("style.php",emailerData).done(processEmailer).fail(function() {
            console.log("ouch");
        });
    }
    return false;

    // now a proper function declaration, will be hoisted:
    function processEmailer(data) {
        if (data=="fail") {
            return false;
        } else if (data=="pass") {
            $("#c1Wrapper").fadeOut("slow","linear");
            $("#confirmation").fadeIn("slow","linear");
            $("#esfContainer1").delay(2000).fadeOut("slow","linear");
            $("#backgroundOpacity").delay(2000).fadeOut("slow","linear");
            return false;
        }
    }
});
于 2013-03-27T02:13:42.810 に答える