JQuery обработчик представления формы - странное поведение - PullRequest
0 голосов
/ 12 ноября 2010

Редактировать: ответил, была синтаксическая ошибка, см. Ниже для фиксированного кода ...

Привет всем, долгое время читатель, первый раз спрашивающий.всегда разрешает отправку формы, даже учитывая, что я переопределил возвращаемое значение в конце функции, вне каких-либо условных операторов.Отправка формы запрещена, только если в теле функции НИЧЕГО, кроме return false.Очень странно.

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

Обходной путь, вероятно, состоит в том, чтобы отслеживать состояние моих элементов управления и соответственно отключать / включать кнопку отправки формыно, конечно, я просто упускаю что-то очевидное, так как эта техника работает везде.

У кого-нибудь есть идеи?Мой гугл-фу подвел меня, и ТАК не имеет ничего, что я мог видеть (пока).Я в конце своего остроумия.Контекст для этого, кстати, FF3, jQuery 1.4.2, и я работаю над установкой mantisbt моей компании.HTML-код формы совершенно нормальный.

Приветствия,

G

    jQuery(document.forms[2]).submit(function(){

    var canSubmit = true;
    var msg = '';   

    // we only do validation if those controls are present and have some options which can be selected
    if(jQuery("select[name=priority] option").length() > 0 && jQuery("select[name=severity] option").length() > 0){

        //there must be a selection in priority
        if(jQuery("select[name=priority]").val() == ''){

            canSubmit = false;
            msg = msg + 'Please select a priority!\n';

        }

        //there must be a selection in severity
        if(jQuery("select[name=severity]").val() == ''){

            canSubmit = false;
            msg = msg + 'Please select a severity!\n';

        }

        //the priority cannot be P1 or P2 and also a feature request
        if( jQuery("select[name=priority]").val() > 49 
                && jQuery("select[name=severity]").val() == 60){

            canSubmit = false;
            msg = msg + 'Feature requests cannot be P1 or P2!';             

        }

        //if there is some feedback, alert it to the user
        if(msg != ''){

            alert(msg);

        }

    }

    //debugging override - always return false!
    return false; //instead of canSubmit;       

});

Редактировать: вот фиксированный код.Большое спасибо Габи!

    var canSubmit = true;
var msg = '';

// validate form submission
jQuery(document.forms[2]).submit(function(e){

    msg = '';
    canSubmit = true;

    // we only do validation if those controls are present and have some
    // options
    // which can be selected
    if(jQuery("select[name=priority] option").length > 0 && 
            jQuery("select[name=severity] option").length > 0){

        // there must be a selection in priority
        if(jQuery("select[name=priority]").val() == 0){

            canSubmit = false;
            msg = msg + 'Please select a priority!\n';

        }

        // there must be a selection in severity
        if(jQuery("select[name=severity]").val() == 0){

            canSubmit = false;
            msg = msg + 'Please select a severity!\n';

        }

        // the priority cannot be P1 or P2 and also a feature request
        if( jQuery("select[name=priority]").val() > 49 
                && jQuery("select[name=severity]").val() == 60){

            canSubmit = false;
            msg = msg + 'Feature requests cannot be P1 or P2!';             

        }           

        if(!canSubmit){

            // if there is some feedback, alert it to the user
            if(msg != ''){

                alert("There were some problems:\n" + msg);

            }

            return false;

        }

    }

});

Ответы [ 2 ]

1 голос
/ 12 ноября 2010

Он всегда отправляется, потому что у вас возникают ошибки JavaScript, и код никогда не достигает оператора return false.

Проблема в том, что для объекта jquery нет функции length(). Это собственность.

Вы должны изменить два .length() на .length в вашем первом if.

В качестве альтернативы вы можете использовать метод .size().

Подробнее об этом на http://api.jquery.com/length/

0 голосов
/ 12 ноября 2010

Попробуйте добавить 'protectDefault ()' ...

jQuery(document.forms[2]).submit(function(evt){
    evt.preventDefault();
    .
    .
    .

Затем, после завершения любой проверки и манипуляции, вы можете вручную вызвать отправку формы:

$(document.forms[2]).submit();
...