jquery $ ("# form"). submit () не вызывается - PullRequest
0 голосов
/ 22 октября 2011

У меня есть форма на странице, для которой требуется капча, если в базе данных установлен атрибут заблокированного пользователя.

$("#expressform").submit(function() {
    if($("#op").val() == "")
            return false;
    if($("#tagbar").val() == "")
            return false;
    $.post("getallowed.php", function(data) {
            if(data == "true")
                    submitNormal();
            else if(data == "false"){
                    displayCaptcha();
            }
    });
    return false;
});

Если пользователь не разрешен, вызывается функция displayCaptcha вместо просто отправки формы.

function displayCaptcha(){
    $.post("expresscaptcha.php", function(data) {
            var string = data;
            $("#expressformdiv").html(string);
            Recaptcha.create("xxxxxxxxxxx", "captcha",
                    {
                            theme: "red",
                            callback: Recaptcha.focus_response_field
                    }
            );
    });
}

Эта функция публикует скрипт php, который возвращает новый тип формы, который возвращает HTML для новой формы с id expressformcaptcha. Вот скрипт php.

<?php
echo <<<_END
<form id="expressformcaptcha">
    //other form elements
    <div id="captchadiv"><div id="captcha"></div></div>
</form>
_END;
?>

Все это прекрасно работает, отображается капча и т. Д. Однако предупреждение в следующем никогда не вызывается. Почему?

$("#expressformcaptcha").submit(function() {
    alert("FORM SUBMITTED");
});

Это как-то связано с тем, что там есть капча, которая винт с jquery? При отправке формы вместо предупреждения страница просто обновляется.

1 Ответ

6 голосов
/ 22 октября 2011

Вам необходимо использовать live или делегат , поскольку expressformcaptcha вводится в DOM позднее.

$("#expressformcaptcha").live('submit', function() {
    alert("FORM SUBMITTED");
});
...