【发布时间】:2014-04-11 17:56:07
【问题描述】:
当我提交一个网络表单时,我会调用两个函数,如下所示:
<form action="myaction" name="myform" method="post" onsubmit="return submithandler(this) && validate(this)">
javascript:
function submithandler (form) {
// a function that replaces some diacritical marks to the correct form
return true;
};
function validate(form) {
// huge validation code
};
在所有浏览器中都能正常工作,Firefox 除外;此浏览器执行 submithandler(this) 部分,但忽略 validate(this)。如果我像这样(如下)制作表单标签,它会进行验证但忽略 submithandler(this)。
<form action="myaction" name="myform" method="post" onsubmit="return validate(this) && submithandler(this)">
有什么想法吗?
编辑:
Firefox 的问题一定是在这个脚本中?也许 var form = event.target; ?请看这里:Change characters on form submit
// 脚本替换表单中所有文本字段中的所有字母(或其他)实例。
function submithandler (form) {
var form = event.target;
var i, l;
for (i = 0, l = form.elements.length; i < l; i += 1) {
if (form.elements[i].type === 'text') {
form.elements[i].value = form.elements[i].value.replace(/Ş/g, 'Ș');
form.elements[i].value = form.elements[i].value.replace(/ş/g, 'ș');
form.elements[i].value = form.elements[i].value.replace(/Ţ/g, 'Ț');
form.elements[i].value = form.elements[i].value.replace(/ţ/g, 'ț');
}
}
return true;
};
【问题讨论】:
-
你试过
onsubmit="return(validate(this) && submithandler(this))"吗?请注意,您的方法可能首先是错误的。也许您应该启动提交处理程序并从其中调用验证方法。而且最好不要使用内联javascript。 -
validate()是否返回 true? -
onsubmit="return(validate(this) && submithandler(this))" 不能解决问题。
-
@Deanna - validate() 由许多“ifs”组成。它们都返回 false。
-
如果它永远不会返回 true,则永远不会调用
submithandler。&&的这种短路行为在所有类似语言中都很常见。
标签: javascript forms firefox