jQuery проверка не происходит - PullRequest
0 голосов
/ 18 февраля 2020

У меня есть скрипт на моей странице:

 <script type='text/javascript'>
    $(document).ready(function() {
        $('#TotalHours').attr('name', 'TotalHours'); // jQuery validation requires field names to be set

        $.validator.addMethod("hours", function(value, element) {
            var totalHours = 0;
            $('select').each(function(i, sel) {
                var hours = $(sel).find(":selected").text();
                if (hours != "")
                    totalHours += parseFloat(hours);
            });
            var reportedTotalHours = parseFloat($("#TotalHours").text());
            var difference = abs(totalHours - reportedTotalHours);
            return difference >= 0.25; // discrepancy must be less than a quarter hour
        });

        $('form').bind('submit', function() {
            $("#TheForm").validate({
                rules: {
                    TotalHours: {
                        hours: true
                    }
                }
            });
        });
    });
</script>

У меня он работал на днях, но теперь, когда форма отправлена, она не проверяется (если я устанавливаю точку останова внутри функции, я привязка к submit, она никогда не попадет) ... что я мог сломать?

edit: вот обработчик для кнопки отправки, если она помогает:

<script type='text/javascript'>
function __E374_onclick(){
    try{$("#TheForm").validate();
    if(!$("#TheForm").valid()){alert('The data you have entered is not valid. Please complete all required fields and correct any data entry errors.'); return;}
    var pm=$("#TheForm").serialize();$.post("/Action/Do/", pm, function(d){
        switch(true){
            case (null==d):dm("The server returned an unexpected response.");break;
            case (!d.Valid):case (!d.Successful):dm(d.Message);break;
            case (d.Successful):dm(d.Message);fu("EditAssessment");break;
            default:dm("An unexpected condition occurred.");break;}});
}catch(e){}}
</script>

и сама кнопка отправки:

<input type='button' id="__E374" class="button" value="Save" onclick="__E374_onclick();"/>

1 Ответ

1 голос
/ 22 февраля 2020
$('form').bind('submit', function() {
    $("#TheForm").validate({
        ....

Нельзя обернуть .validate() внутри обработчика отправки. Плагин уже автоматически захватывает событие отправки, так что это бессмысленно; и он блокирует плагин от инициализации себя в форме до первого события отправки. (BTW - jQuery .bind() устарел)

Метод .validate() используется для инициализации плагина в вашей форме и вызывается после создания формы, чаще всего в обработчике событий ready.

<input type='button' ....

Плагин игнорирует щелчок <button> и type="button". Вам нужно изменить это на type="submit".

Пожалуйста, обратитесь к на странице SO Wiki для типичного использования и примеров.

...