从 HTML 表单中获取值失败
Taking values from HTML form fails
我想使用 JavaScript 函数将 html 表单中的值保存到 Firebase 数据库中。
以下代码有效(不使用表单):
<html>
<head>
<script src="https://cdn.firebase.com/js/client/2.2.1/firebase.js"></script>
</head>
<body>
<script>
var ref = new Firebase("https://mydatabase.firebaseio.com/");
// Opmerking laten invullen
var _klas = "testk";
var _datum = new Date().getTime();
// Generate a reference to a new location and add some data using push()
var postsRef = ref.child("opmerkingen");
var newPostRef = postsRef.push({
klas: _klas,
datum: _datum
});
</script>
</body>
</html>
使用表单的以下代码不起作用
<html>
<head>
<script src="https://cdn.firebase.com/js/client/2.2.1/firebase.js"></script>
<script language=javascript type="text/javascript">
function buttonPressed(event)
{
var ref = new Firebase("https://mydatabase.firebaseio.com/");
// Opmerking laten invullen
var _klas = document.getElementById("Klas").value;
var _datum = new Date().getTime();
// Generate a reference to a new location and add some data using push()
var postsRef = ref.child("opmerkingen");
var newPostRef = postsRef.push({
klas: _klas,
datum: _datum
});
}
</script>
</head>
<body>
<form method='post' action=''>
<input type='text' name = 'Klas' id='Klas'>
<input type='submit' name='submit' onClick='buttonPressed(event)'>
</form>
</body>
</html>
怎么了?
添加到问题:使用 onFormSubmitted 更改了代码
<html>
<head>
<script src="https://cdn.firebase.com/js/client/2.2.1/firebase.js"></script>
<script language=javascript type="text/javascript">
function onFormSubmitted(event)
{
event.preventDefault();
var ref = new Firebase("https://mydatabase.firebaseio.com/");
// Opmerking laten invullen
var _klas = document.getElementById("Klas").value;
var _datum = new Date().getTime();
// Generate a reference to a new location and add some data using push()
var postsRef = ref.child("opmerkingen");
var newPostRef = postsRef.push({
klas: _klas,
datum: _datum
});
// Get the unique ID generated by push()
var postID = newPostRef.key();
}
</script>
</head>
<body>
<form method='post' action='' onsubmit="return onFormSubmitted(e)">
<input type='text' name='Klas' id='Klas'>
<input type='submit' name='submit' value='Send'>
</form>
</body>
</html>
您的 <form>
标签需要监听 "onsubmit" 事件,而不是 "onClick"。
<form method='post' action='' onsubmit="return onFormSubmitted(e)">
<input type='text' name = 'Klas' id='Klas'>
<input type='submit' name='submit'>
</form>
<script>
function onFormSubmitted(event)
{
event.preventDefault();
// get text input value
}
</script>
这是一个很容易通过控制台调试解决的问题。让我们一步一步来,这样您就可以看到问题所在。
如果您打开控制台(通常是 F12,或在开发人员工具中),您将看到页面生成的消息和错误。让我们从您的代码开始(我将其复制到 JSFiddle:http://jsfiddle.net/hu6g0w6r/)。
您正在将变量 e
(未在任何地方定义)传递给函数。 JavaScript 代码在那里失败,浏览器继续正常提交。如果您检查控制台,您会看到如下错误:
Uncaught ReferenceError: e is not defined
很好。让我们做出改变。更新这行代码,并删除 e
(see full code here):
<form method='post' action='' onsubmit="return onFormSubmitted()">
再试一次 运行。现在您收到一个新错误,因为 event
未定义:
Uncaught TypeError: Cannot read property 'preventDefault' of undefined
发生这种情况是因为 event
始终存在,并且您不需要在函数头中定义它(您使用的是未定义的 event
变量而不是全局变量 event
对象)。所以只需删除函数中的引用(但继续使用 event.preventDefault()
、see the full code here):
function onFormSubmitted() {
就是这样!没有更多错误,问题已解决。
完整代码可以看in the last JSFiddle,或者这里:
JS:
function onFormSubmitted() {
event.preventDefault();
var ref = new Firebase("https://mydatabase.firebaseio.com/");
// Opmerking laten invullen
var _klas = document.getElementById("Klas").value;
var _datum = new Date().getTime();
// Generate a reference to a new location and add some data using push()
var postsRef = ref.child("opmerkingen");
var newPostRef = postsRef.push({
klas: _klas,
datum: _datum
});
// Get the unique ID generated by push()
var postID = newPostRef.key();
}
HTML:
<form method='post' action='' onsubmit="return onFormSubmitted()">
<input type='text' name='Klas' id='Klas'>
<input type='submit' name='submit' value='Send'>
</form>
附带说明一下,您正在返回函数 onFormSubmitted()
的结果,但该函数未返回任何值。因此,您可以将 onsubmit 调用更改为 onsubmit="onFormSubmitted()"
as seen on this JSFiddle.
我想使用 JavaScript 函数将 html 表单中的值保存到 Firebase 数据库中。
以下代码有效(不使用表单):
<html>
<head>
<script src="https://cdn.firebase.com/js/client/2.2.1/firebase.js"></script>
</head>
<body>
<script>
var ref = new Firebase("https://mydatabase.firebaseio.com/");
// Opmerking laten invullen
var _klas = "testk";
var _datum = new Date().getTime();
// Generate a reference to a new location and add some data using push()
var postsRef = ref.child("opmerkingen");
var newPostRef = postsRef.push({
klas: _klas,
datum: _datum
});
</script>
</body>
</html>
使用表单的以下代码不起作用
<html>
<head>
<script src="https://cdn.firebase.com/js/client/2.2.1/firebase.js"></script>
<script language=javascript type="text/javascript">
function buttonPressed(event)
{
var ref = new Firebase("https://mydatabase.firebaseio.com/");
// Opmerking laten invullen
var _klas = document.getElementById("Klas").value;
var _datum = new Date().getTime();
// Generate a reference to a new location and add some data using push()
var postsRef = ref.child("opmerkingen");
var newPostRef = postsRef.push({
klas: _klas,
datum: _datum
});
}
</script>
</head>
<body>
<form method='post' action=''>
<input type='text' name = 'Klas' id='Klas'>
<input type='submit' name='submit' onClick='buttonPressed(event)'>
</form>
</body>
</html>
怎么了?
添加到问题:使用 onFormSubmitted 更改了代码
<html>
<head>
<script src="https://cdn.firebase.com/js/client/2.2.1/firebase.js"></script>
<script language=javascript type="text/javascript">
function onFormSubmitted(event)
{
event.preventDefault();
var ref = new Firebase("https://mydatabase.firebaseio.com/");
// Opmerking laten invullen
var _klas = document.getElementById("Klas").value;
var _datum = new Date().getTime();
// Generate a reference to a new location and add some data using push()
var postsRef = ref.child("opmerkingen");
var newPostRef = postsRef.push({
klas: _klas,
datum: _datum
});
// Get the unique ID generated by push()
var postID = newPostRef.key();
}
</script>
</head>
<body>
<form method='post' action='' onsubmit="return onFormSubmitted(e)">
<input type='text' name='Klas' id='Klas'>
<input type='submit' name='submit' value='Send'>
</form>
</body>
</html>
您的 <form>
标签需要监听 "onsubmit" 事件,而不是 "onClick"。
<form method='post' action='' onsubmit="return onFormSubmitted(e)">
<input type='text' name = 'Klas' id='Klas'>
<input type='submit' name='submit'>
</form>
<script>
function onFormSubmitted(event)
{
event.preventDefault();
// get text input value
}
</script>
这是一个很容易通过控制台调试解决的问题。让我们一步一步来,这样您就可以看到问题所在。
如果您打开控制台(通常是 F12,或在开发人员工具中),您将看到页面生成的消息和错误。让我们从您的代码开始(我将其复制到 JSFiddle:http://jsfiddle.net/hu6g0w6r/)。
您正在将变量 e
(未在任何地方定义)传递给函数。 JavaScript 代码在那里失败,浏览器继续正常提交。如果您检查控制台,您会看到如下错误:
Uncaught ReferenceError: e is not defined
很好。让我们做出改变。更新这行代码,并删除 e
(see full code here):
<form method='post' action='' onsubmit="return onFormSubmitted()">
再试一次 运行。现在您收到一个新错误,因为 event
未定义:
Uncaught TypeError: Cannot read property 'preventDefault' of undefined
发生这种情况是因为 event
始终存在,并且您不需要在函数头中定义它(您使用的是未定义的 event
变量而不是全局变量 event
对象)。所以只需删除函数中的引用(但继续使用 event.preventDefault()
、see the full code here):
function onFormSubmitted() {
就是这样!没有更多错误,问题已解决。
完整代码可以看in the last JSFiddle,或者这里:
JS:
function onFormSubmitted() {
event.preventDefault();
var ref = new Firebase("https://mydatabase.firebaseio.com/");
// Opmerking laten invullen
var _klas = document.getElementById("Klas").value;
var _datum = new Date().getTime();
// Generate a reference to a new location and add some data using push()
var postsRef = ref.child("opmerkingen");
var newPostRef = postsRef.push({
klas: _klas,
datum: _datum
});
// Get the unique ID generated by push()
var postID = newPostRef.key();
}
HTML:
<form method='post' action='' onsubmit="return onFormSubmitted()">
<input type='text' name='Klas' id='Klas'>
<input type='submit' name='submit' value='Send'>
</form>
附带说明一下,您正在返回函数 onFormSubmitted()
的结果,但该函数未返回任何值。因此,您可以将 onsubmit 调用更改为 onsubmit="onFormSubmitted()"
as seen on this JSFiddle.