javascript - 为什么 onsubmit 事件处理程序在 php 解释器中不起作用
问题描述
我正在阅读Learning PHP, MySQL & Javascript 4th edition,在第16章我遇到了一个问题。
Onsubmit 事件处理程序在<?php ... ?>
(PHP 解释器)中不起作用,而没有它它工作得很好。我错过了什么吗?
我删除了部分代码只是为了显示问题
<?php
echo <<<_END
<!DOCTYPE html>
<html>
<head>
<title>An Example Form</title>
<style>
.signup {
border:1px solid #999999;
font: normal 14px helvetica;
color: #444444;
}
</style>
<script>
function validate(form) {
fail = validateForename(form.forename.value)
if(fail == "") return true
else { alert(fail); return false }
}
function validateForename(field) {
return (field == "") ? "No Forename was entered.\n" : ""
}
</script>
</head>
<body>
<table border="0" cellpadding="2" cellspacing="5" bgcolor="#eeeeee">
<th colspan="2" align="center">Signup Form</th>
<form method="post" onsubmit="return validate(this)">
<tr><td>Forename</td>
<td><input type="text" maxlength="32" name="forename"></td>
</tr>
<tr><td colspan="2" align="center">
<input type="submit" value="Signup"></td>
</tr>
</form>
</table>
</body>
</html>
_END;
?>
使用此代码,即使我提交空表单,javascript 警报功能也不会显示任何警报。
这里只是 HTML/CSS/JS:
<!DOCTYPE html>
<html>
<head>
<title>An Example Form</title>
<style>
.signup {
border: 1px solid #999999;
font: normal 14px helvetica;
color: #444444;
}
</style>
<script>
function validate(form) {
fail = validateForename(form.forename.value)
if (fail == "") return true
else {
alert(fail);
return false
}
}
function validateForename(field) {
return (field == "") ? "No Forename was entered.\n" : ""
}
</script>
</head>
<body>
<table border="0" cellpadding="2" cellspacing="5" bgcolor="#eeeeee">
<th colspan="2" align="center">Signup Form</th>
<form method="post" onsubmit="return validate(this)">
<tr>
<td>Forename</td>
<td><input type="text" maxlength="32" name="forename"></td>
</tr>
<tr>
<td colspan="2" align="center">
<input type="submit" value="Signup"></td>
</tr>
</form>
</table>
</body>
</html>
解决方案
您必须\n
两次转义换行符,否则您的 HTML 输出将不像预期的那样:
return (field == "") ? "No Forename was entered.\\n" : ""
推荐阅读
- linux - ceph-rgw 安装后服务自动停止
- android - Android Studio 模拟器的 Android 8、9 和 10 ARM 映像在哪里?
- .net-core - 有没有办法在 .NET Core 库中包含 .NET Framework 代码?
- docker - 将 kafDrop 连接到安全代理
- postman - 收集运行中的邮递员收集变量
- c++ - 无法使用 Arduino 和 SIM900 连接或发布到 MQTT 代理
- c# - 堆栈溢出响应 API
- arrays - 使用 ID 从另一个工作表导入数据,但只导入一些列
- python - 如何更快地遍历十个列表(每个十个元素)的笛卡尔积?(概率和骰子)
- c - CSR 和 BFS 总是以 0 步找到