编辑:回答,是语法错误,请参阅下面的固定代码...
大家好,长时间读者,第一次问问。
以下代码总是允许表单提交,即使我已经在函数末尾覆盖了任何条件语句之外的返回值。如果函数体中除了返回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;
}
}
});
答案 0 :(得分:1)
它总是被提交,因为您发生了javascript错误,并且代码永远不会到达return false
语句..
问题是jquery对象没有length()
函数。这是一个属性。
您应该在第一个.length()
中将两个.length
更改为if
。
或者,您可以使用.size()
方法。
答案 1 :(得分:0)
尝试添加'preventDefault()'...
jQuery(document.forms[2]).submit(function(evt){
evt.preventDefault();
.
.
.
然后,在完成任何验证和操作后,您可以手动调用表单的提交:
$(document.forms[2]).submit();