这将失败有几个原因。
您将遇到的第一个是,因为您在调用时不传递任何参数notEmpty
,所以变量elem
将是undefined
. 当您尝试访问其上的属性 ( value
) 时,将引发异常并且函数将停止。
让我们从顶部开始。
首先,我们将使用更现代的方法来应用事件处理程序。
提供一种方法来识别您要处理的表单。id 属性是一个很好的通用选择(但使用比我更有意义的名称):
<form id="myForm"
method="get"
action="http://www.censoredgaming.co.uk/cgi-bin/mailer.pl">
接下来,在 DOM 中获取对表单的引用并向其添加事件侦听器:
document.getElementById('myForm').addEventListener('submit', notEmpty);
请注意,您必须在将表单添加到 DOM后执行此操作。实现这一点的最简单方法是将您<script>
的放在后面</form>
(就在前面</body>
是一个受欢迎的地方)。您还可以使用在 DOM 准备好或文档已加载时触发的事件处理程序。
旧版本的 Internet Explorer 不支持addEventListerner
,如果您想支持它们,请参阅具有兼容性例程的 MDN 文档。
接下来,更新notEmpty
功能。由于它是一个事件处理程序,它会得到一个参数——一个事件对象。它还将在绑定到的元素(表单)的上下文中调用。
function notEmpty(event) {
var aForm = this;
}
您想检查某个元素是否具有一定长度的值,但您的问题中没有此类元素的迹象。让我们使用这个例子:
<label> Some data <input name="example"></label>
您可以通过表单的元素集合引用该元素:
function notEmpty(event) {
var aForm = this;
var input = aForm.elements.example;
}
现在您可以添加您的测试:
function notEmpty(event) {
var aForm = this;
var input = aForm.elements.example;
if (input.length >= 2) {
} else {
}
}
如果您不想提交表单,请阻止对事件的默认操作:
function notEmpty(event) {
var aForm = this;
var input = aForm.elements.example;
if (input.length >= 2) {
// At least two characters, all is well
} else {
alert("An error");
input.focus();
event.preventDefault();
}
}