【问题标题】:Why won't this form validate?为什么此表单无法验证?
【发布时间】:2009-02-17 11:48:48
【问题描述】:

“onsubmit”语句没有被调用:

<form action="index.php" method="post" onsubmit="return validateSearchKeyword()">
        <input class="text_search" id="text_search" name="text_search" type="text" value="search" onfocus="if (this.value=='search') this.value = ''" onBlur="if (this.value=='') this.value = 'search'"  />
    </form> 

这是我的验证函数:

function validateSearchKeyword()
{ alert ('sad');//for testing purposes - this alert is not showed
if (document.getElementById('text_search').value==""){creatediv('divWarnSearch','You must supply a value', '120px', '250px');return false;}
}

creatediv 函数在其他表单上运行良好,所以问题不在于那个。

有什么想法吗? 谢谢

【问题讨论】:

标签: javascript html validation


【解决方案1】:

您缺少提交按钮,这可能会导致用户无法在某些浏览器中提交表单。

此外,如果您可以发布您的验证功能会很有帮助,这样我们就可以检查是否存在问题,例如它返回一个布尔值吗?

如果你使用以下方法,你会得到什么结果:

<form ... onsubmit="alert('Foo'); return true">

【讨论】:

  • 我真的需要提交按钮来验证它吗?因为,当按下 Enter 键时,表单已正确提交。谢谢
  • @Armadillo,如果您碰巧在没有键盘的设备上浏览,如何按 Enter 键?
【解决方案2】:

检查以确保您正在调用的函数确实存在,然后我会通过该函数来检查问题。 Firebug 可能对您有用,或者您可以将以下内容粘贴在被调用函数的顶部(以确保它走得那么远):

alert('here');

【讨论】:

  • Firefox 的错误控制台会告诉你函数是否存在,不需要 firebug。
  • 是的,但我更多地考虑的是逐步通过函数查找问题。
【解决方案3】:

你的问题是:

onBlur="if (this.value=='') this.value = 'search'"

当你提交时,你失去了对文本框的焦点并启动了事件:尝试把

alert(document.getElementById('text_search').value);

你会得到“搜索”而不是空字符串...

【讨论】:

  • 好点,但是 onsubmit 事件会在 onblur 重新填充文本框之前触发(嗯,在 FF3、IE7 和 Chrome 中确实如此)。 OP 可能应该更新他们的验证功能以忽略“默认”值,只是为了在所有浏览器中都是安全的。
  • 我现在在工作,我们在 IE6 中。可以肯定的是,添加 =='' || =='搜索'...
【解决方案4】:

试过onsubmit="javascript: validateSearchKeyword();" 吗? AFAIK,它已经返回,无需指定。

您也可以尝试删除 ()。

此外,提交按钮as Mr Potato Head 表示,如果您没有删除它以使代码简洁。

编辑:这是一个经过深思熟虑的帖子。这是不该做什么的一个很好的例子。如果您发现在您的代码中实现了这些建议中的任何一个,请重构!

【讨论】:

  • 其实还是要用return的,因为onsubmit的返回类型决定了表单是否提交。
  • 我的意思是,如果函数已经在它的主体内返回,你会调用 return 两次。
  • @Adriano:完全正确:你从 validateSearchKeyword() 返回一次,从 onsubmit 返回一次。
  • 为什么是downmod?不生气,只是想知道。我的 cmets 的意思是'我不必用'return function()'来做这件事
  • 哦,我不是说是你,我只是问。
猜你喜欢
  • 1970-01-01
  • 2011-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-01
  • 2019-04-27
  • 2021-04-21
相关资源
最近更新 更多