【问题标题】:Uncaught ReferenceError: <firebase string> is not defined at HTMLTableRowElement.onclick未捕获的 ReferenceError: <firebase string> 未在 HTMLTableRowElement.onclick 中定义
【发布时间】:2018-04-05 15:01:43
【问题描述】:

大家好,我创建了从 Firebase 读取数据的简单动态表。这是表格的代码:

userRef.on("child_added", snap => {
                 var username = snap.child("name").child("name").val();
                 var user_surname = snap.child("name").child("surname").val();
$("#user_table").append("<tr onClick=\"displayCos(" + user_surname + ")\"><td>"+ username +"</td></tr>")

如您所见,表格显示用户名,当我点击它时,我想在alert 中显示用户姓氏,这是displayCos 功能代码:

function displayCos(surname){
  if(surname != null){
  $("#surname_id").text(surname)
  }else {
  $("#surname_id").text("null");
 }

我的错误出现了,当我单击用户名时,调试器显示此错误:Uncaught ReferenceError: (Here is user surname, let say: JOHNSON) is not defined at HTMLTableRowElement.onclick。我还发现,当我在 firebase 中将 username_surname 更改为包含字母和数字的内容时,错误看起来像这样:Uncaught SyntaxError: Invalid or unexpected token,当值只是数字时,一切正常。 我可能尝试了 StackOverflow 的所有解决方案,但它们都不能解决我的问题。我认为我的值不是一个字符串,因为它应该是一个字符串,遗憾的是我是 jQuery 和 Javascript 的新手,并且不能仅靠我自己弄清楚,所以我正在寻求帮助:)

@编辑 html 代码,没有 firebase 详细信息,如果它们很重要,我会更新:

<html lang="en">
 <head>

  <title>Wyplata</title>
  <link rel="stylesheet" href="style.css">

 </head>

 <body>

   <div id="login_div" class = "login-page">
     <div class = "form">
       <div class = "register-form">

         <input type = "text" placeholder="Imie" id="email_field"/>
         <input type = "text" placeholder="Hasło" id="password_field"/>
         <button onclick="login()" > Zaloguj </button>

       </div>
    </div>
  </div>

  <div id="company_div" class = "company-page">
    <div id="user_table" class = "userui">
      <button onclick="logout()" > Wyloguj </button>
    </div>
  </div>

【问题讨论】:

  • 你能在你的问题中添加你的 javascript 生成的 HTML 吗?
  • 另外,您提到“firebase 中的用户名姓氏”,但您的代码显示 snap.child("name").child("surname").val();
  • 哦,不,我当然在更改“姓氏”值,只是在我写这个问题时有点失败。
  • 我们应该看到的是 id="user_table" 的 div 中到底注入了什么。你能用浏览器检查器看到它吗?顺便说一句,你不应该在没有 标签的情况下将一些 TR 直接注入到 div 中(它可能有效,但它不是正确的 HTML)。
  • 我可以从浏览器检查器中看到的是,当我点击姓氏为“Johnson”的用户名时,除了已经打开的 index.js 文件之外,浏览器检查器还会打开名为 (index) 的文件,并且在这里是第 1 行:displayCos(Johnson)。 “Johnson”被高亮显示,错误是:未捕获的 ReferenceError: Johnson is not defined at HTMLTableRowElement.onclick

标签: javascript jquery firebase firebase-realtime-database


【解决方案1】:
$("#user_table").append("<tr onClick=\"displayCos('" + user_surname + "')\"><td>"+ username +"</td></tr>")

见上文。您应该用引号将用户名括起来,以获得displayCos('Johnson')

如果您得到displayCos(Johnson),则表示 Johnson 是一个变量名,JavaScript 会尝试将此变量的值作为 displayCos 函数的参数传递。

【讨论】:

  • @Renuad Tarnec 谢谢你的时间:)
  • @BartSumps 欢迎您。此外,正如上面在您问题的 cmets 中所说,您应该将代码修改为
    。此外,尽可能尝试学习像 Vue.js 这样的框架,它可以让代码更高效、更简洁。
  • 我已经修改了代码,当然我会检查 Vue.js。感谢您的建议
猜你喜欢
  • 2016-10-20
  • 2016-04-30
  • 1970-01-01
  • 2020-10-08
  • 2021-06-17
  • 2023-01-23
  • 2016-11-03
  • 2011-01-05
  • 2016-01-02
相关资源
最近更新 更多