无法将表单提交按钮重新设置为禁用
Cannot re-set form submit button to disabled
在网页上我有一个表格:
<form action="/SignUp.py" method="post">
<input required type="text" name="fullName" onKeyPress="checkFinished()" autofocus>
<input type="submit" name="submitButton" value="Sign Up" disabled>
</form>
和脚本:
<script>
function checkFinished() {
if (document.getElementsByName("fullName")[0].value.match(/. ./).length > 0) {
document.getElementsByName("submitButton")[0].disabled = false;
}
else {
document.getElementsByName("submitButton")[0].disabled = true;
}
}
</script>
如果我使用 Firebug 单步执行代码,我可以看到执行路径是正确的。但是,当代码遇到 else 子句并且应该(重新)禁用 submitButton
时,它不会被禁用。我在这里做错了什么?
您的正则表达式执行以下操作:
/. ./
- 匹配任何字符(换行符除外)
- 字面匹配字符
- 匹配任何字符(换行符除外)
match
方法 returns 一个包含结果的数组,否则它 returns null
。
当没有匹配项时,您的程序会抛出错误,因为 null
没有 length
属性。因此该函数抛出异常,脚本标记内的程序的其余部分不会 运行.
一种解决方案是使用 test
方法,其中 returns 一个布尔值。
/. ./.test(document.getElementsByName("fullName")[0].value)
JSFiddle 演示:http://jsfiddle.net/vbgp6gba/2/
做了一点fiddle给大家看一下
https://jsfiddle.net/mo5wfjLt/2/
你的代码有什么问题:
首先,退格键不会触发 keypress
事件,所以如果您想删除字符,就会遇到问题。请改用 keyup
。如果你想尝试按键事件,试试这个:http://www.asquare.net/javascript/tests/KeyCode.html
下一个主要错误是这一行
document.getElementsByName("fullName")[0].value.match(/. ./).length
如果 document.getElementsByName("fullName")[0].value.match(/. ./)
不存在,则此 returns null
,因此当您立即尝试访问 .length
时,您正在尝试做 null.length
,所以你得到一个 Uncaught TypeError: Cannot read property 'length' of null
此外,将 document.getElementsByName("fullName")[0]
等值保存在变量中也是一种很好的做法。有帮助。
所以,检查一下fiddle,如果还有不明白的地方再问。
在网页上我有一个表格:
<form action="/SignUp.py" method="post">
<input required type="text" name="fullName" onKeyPress="checkFinished()" autofocus>
<input type="submit" name="submitButton" value="Sign Up" disabled>
</form>
和脚本:
<script>
function checkFinished() {
if (document.getElementsByName("fullName")[0].value.match(/. ./).length > 0) {
document.getElementsByName("submitButton")[0].disabled = false;
}
else {
document.getElementsByName("submitButton")[0].disabled = true;
}
}
</script>
如果我使用 Firebug 单步执行代码,我可以看到执行路径是正确的。但是,当代码遇到 else 子句并且应该(重新)禁用 submitButton
时,它不会被禁用。我在这里做错了什么?
您的正则表达式执行以下操作:
/. ./
- 匹配任何字符(换行符除外)
- 字面匹配字符
- 匹配任何字符(换行符除外)
match
方法 returns 一个包含结果的数组,否则它 returns null
。
当没有匹配项时,您的程序会抛出错误,因为 null
没有 length
属性。因此该函数抛出异常,脚本标记内的程序的其余部分不会 运行.
一种解决方案是使用 test
方法,其中 returns 一个布尔值。
/. ./.test(document.getElementsByName("fullName")[0].value)
JSFiddle 演示:http://jsfiddle.net/vbgp6gba/2/
做了一点fiddle给大家看一下
https://jsfiddle.net/mo5wfjLt/2/
你的代码有什么问题:
首先,退格键不会触发 keypress
事件,所以如果您想删除字符,就会遇到问题。请改用 keyup
。如果你想尝试按键事件,试试这个:http://www.asquare.net/javascript/tests/KeyCode.html
下一个主要错误是这一行
document.getElementsByName("fullName")[0].value.match(/. ./).length
如果 document.getElementsByName("fullName")[0].value.match(/. ./)
不存在,则此 returns null
,因此当您立即尝试访问 .length
时,您正在尝试做 null.length
,所以你得到一个 Uncaught TypeError: Cannot read property 'length' of null
此外,将 document.getElementsByName("fullName")[0]
等值保存在变量中也是一种很好的做法。有帮助。
所以,检查一下fiddle,如果还有不明白的地方再问。