jQuery表单提交处理程序 - 奇怪的行为

时间:2010-11-12 12:27:14

标签: jquery html mantis

编辑:回答,是语法错误,请参阅下面的固定代码...

大家好,长时间读者,第一次问问。

以下代码总是允许表单提交,即使我已经在函数末尾覆盖了任何条件语句之外的返回值。如果函数体中除了返回false之外没有任何内容,则仅允许表单提交。非常奇怪。

我已经验证了在表单提交时调用了该函数,方法是在函数体中输入警报并检查它是否提醒我。我尝试将代码剥离成离散函数并将其指定为事件处理程序,没有区别。

解决方法可能是监视我的控件的状态并相应地禁用/启用表单的提交按钮,但是我肯定错过了一些明显的东西,因为这种技术适用于其他地方。

有没有人有任何想法?我的google-fu让我失望了,因此我没有看到任何东西(还有)。我的智慧结束了。 btw的上下文是FF3,jQuery 1.4.2,我正在研究我公司的mantisbt安装。表格的html完全正常。

干杯,

    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;       

});

编辑:这是固定代码。非常感谢Gaby!

    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 个答案:

答案 0 :(得分:1)

它总是被提交,因为您发生了javascript错误,并且代码永远不会到达return false语句..

问题是jquery对象没有length()函数。这是一个属性。

您应该在第一个.length()中将两个.length更改为if

或者,您可以使用.size()方法。

有关http://api.jquery.com/length/

的更多信息

答案 1 :(得分:0)

尝试添加'preventDefault()'...

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

然后,在完成任何验证和操作后,您可以手动调用表单的提交:

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