我问这个是因为我自己完全失去了,需要一双新鲜的眼睛。
在提交连接的HTML表单时成功调用以下JavaScript函数。函数启动并运行前两个if
语句(如果返回false
则暂停提交。)
然后,第一个测试alert
“出现之前”然后表单提交,完全错过了函数的其余部分。在测试时我更改了最后一行以返回false
,这样无论发生什么,函数都应返回false
,但表单仍然提交。
function validateForm(form)
{
// declare variables linked to the form
var _isbn = auto.isbn.value;
var _idisplay = auto.isbn.title;
var _iref = "1234567890X";
// call empty string function
if (EmptyString(_isbn,_idisplay)==false) return false;
// call check against reference function
if (AgainstRef(_isbn,_iref,_idisplay)==false) return false;
// call check length function
alert("before");///test alert
////// FORM SUBMITS HERE?!? /////////////
if (AutoLength(_isbn)==false) return false;
alert("after");///test alert
// if all conditions have been met allow the form to be submitted
return true;
}
编辑:这是AutoLength
的样子:
function AutoLength(_isbn) {
if (_isbn.length == 13) {
return true; {
else {
if (_isbn.length == 10) {
return true; {
else {
alert("You have not entered a valid ISBN10 or ISBN13. Please correct and try again.");
return false;
}
}
答案 0 :(得分:1)
AutoLength
的实施存在错误。目前,它看起来像这样:
function AutoLength(_isbn) {
if (_isbn.length == 13) {
return true; { // <------ incorrect brace
else {
if (_isbn.length == 10) {
return true; { // <------ incorrect brace
else {
alert("You have not entered a valid ISBN10 or ISBN13. Please correct and try again.");
return false;
}
}
看看它是如何关闭所有块的?那是因为你在两个地方使用了错误的支架,而你忘了关闭这个功能。
您可以像这样重写函数:
function AutoLength(_isbn) {
return _isbn.length === 13 || _isbn.length === 10;
}
如果你非常喜欢使用alert
,你可以在validateForm
内执行此操作(尽管我会尝试找到一种更加用户友好的方式来显示错误消息)。
将来,当您尝试调试代码时,可以使用try
和catch
来“捕获”Errors
,如下所示:
try {
if (false === AutoLength(_isbn)) {
return false;
}
} catch (e) {
alert('AutoLength threw an error: '+e.message);
}
答案 1 :(得分:0)
如果运行时错误终止了函数的执行,则表单提交。因此,请查看脚本控制台日志以获取错误消息。