【问题标题】:Resetting/Clearing Form Upon Button Click w/ Firebase使用 Firebase 单击按钮时重置/清除表单
【发布时间】:2016-10-10 13:13:55
【问题描述】:

我在使用 Firebase 单击按钮时实际上无法清除表单的内容。我可以在另一个只有一个文本字段的表单上使用type="reset",但是,第二个表单有两个文本字段,当我尝试以下操作时:

function clearFields() {
    document.getElementById(userCityEmail).value = "";
    document.getElementById(cityTextField).value = "";
}

或者我试试这个(只是使用 reset()):

function clearFields() {
    document.getElementById(userCityEmail).reset();
    document.getElementById(cityTextField).reset();
}

页面将重新加载,但没有任何内容发送到 Firebase。如果我不使用上述功能并将文本留在文本字段中,它会将内容发送到 Firebase。我哪里错了?提前致谢!

这是我的 HTML 表单:

<form id="myform" method="post">
    <input type="email" class="contactUsEmail" id="userCityEmail" placeholder="Enter email" name="contactUsEmail">
    <input type="text" class="contactUsEmail" id="cityTextField" placeholder="City" name="contactUsCity">
    <button type="submit" id="citySubmitButton" onclick="submitCityClick(); clearFields(); return false;" class="btn btn-primary contactUsButton">Submit</button>
</form>

Javascript:

var userCityEmail = document.getElementById('userCityEmail');
var cityTextField = document.getElementById('cityTextField');
var citySubmitButton = document.getElementById('citySubmitButton');

function submitCityClick() {
  var firebaseRef = firebase.database().ref();
  var userEmail = userCityEmail.value + " " + cityTextField.value;

  firebaseRef.child("potentialCities").push().set(userEmail);
}

function clearFields() {
    document.getElementById(userCityEmail).value = "";
    document.getElementById(cityTextField).value = "";
}

【问题讨论】:

  • 您的clearFields() 电话是否正常工作?你有一个 HTML 元素存储为 userCityEmailcityTextField 的值,然后你在这些上调用 document.getElementById。

标签: javascript html forms firebase firebase-realtime-database


【解决方案1】:

弄清楚现在发生了什么。 你遇到的问题是你在打电话 firebaseRef.child("potentialCities").push().set(userEmail);

这没有意义。仅使用 push(userEmail) 或 set(userEmail)。

这两件事的区别在于push会在potentialCities树节点下创建一个随机ID,而set会将用户邮件数据放在同一个对象下。它可能会被覆盖。这种情况下推荐推送。

为了解释字段清除,在提交点击方法中仍然有clearfields方法。下面的代码

function submitCityClick() {
   var firebaseRef = firebase.database().ref();
   var userEmail = userCityEmail.value + " " + cityTextField.value;

   firebaseRef.child("potentialCities").push(userEmail);
   clearFields()
 }

这也希望你有正确的 firebase ref,你检查过你正在使用的 url 吗?

你做错的另一件事是你声明了这些变量:

var userCityEmail = document.getElementById('userCityEmail');
var cityTextField = document.getElementById('cityTextField');

然后尝试在 clearFields 中使用该变量获取 elementById:

document.getElementById(userCityEmail).value = "";
document.getElementById(cityTextField).value = "";

这不起作用,您必须通过 clearFields 中的字符串获取它,或者只使用您声明的变量:

userCityEmail.value = "";
or
document.getElementById('userCityEmail').value = "";

我不建议仅仅因为这个原因而引入 jQuery。这是一个很大的库,如果你能用 vanilla javascript 就足够了,那就去做吧!

【讨论】:

  • 这似乎是一个合乎逻辑的解决方案,但我尝试了你的方法,不幸的是它没有奏效。该页面将重新加载,这会导致表单清晰,但不会将任何内容发送到 Firebase 数据库。非常令人沮丧。
  • 现在应该是最新的了@mur7ay
  • 感谢您的进一步解释!是的,我知道我有正确的 Firebase 参考,因为当我不使用任何类型的重置功能时,它不会重新加载页面,它实际上会将数据发送到 Firebase。但是当我这样做时,它不会发送。我认为这与页面重新加载有关。
  • 好的,我想通了。我不想发布另一个解决方案,因为你帮助导致了它,但我仍然调用 clearFields() 但我将两个字段的内容更改为: $('#userCityEmail').val('');
  • 嗯,那应该没什么区别。您所做的只是使用 jQuery,它最终与您的代码相同。但是,我发现你犯了另一个错误,请检查我的编辑。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-08
  • 1970-01-01
相关资源
最近更新 更多