【问题标题】:Trying to call a function in javascript试图在javascript中调用一个函数
【发布时间】:2011-09-08 16:38:33
【问题描述】:

这是我的代码,我需要做的就是调用一个将内容写入动态 div 的函数

函数 getComments(id) { 警报(ID); } 变种结果集=“”; 函数 CreateDiv() { resultSet+="

【问题讨论】:

  • 应该在哪里调用getComments?不是。
  • 上面的代码块写在 标签内,所以一旦 body 加载,getComments 应该被调用,但它根本没有被调用
  • 创建 div 中的许多变量没有意义
  • 我格式化了 JavaScript 代码。现在很明显为什么不调用 getComments 函数。提示:检查引号。
  • 我看不到正在调用的函数。请说明在哪里。 fn 名称仅在字符串内部传递,该字符串分配给变量,该变量无处使用。

标签: javascript


【解决方案1】:

那里有一些问题。

  1. 您在引用 rows 时没有在任何地方定义它,这将导致异常。
  2. 假设您在没有显示的地方定义了rows,代码只是创建了一个包含script 标记的字符串并将该字符串放入resultSet。要使脚本标签内的代码运行,您必须在某些元素上将 resultSet 分配给 innerHTML
  3. 在生成的脚本中对getComments 的调用中有一个额外的)

另外:您的 id 值似乎是数字(这是基于您将它们传递给 getComments 并且它们周围没有引号)。请注意,在 HTML5 中允许使用以数字开头的 id 值,但在早期版本的 HTML 和 CSS 中不允许,因此最好避免使用。

几乎可以肯定有更好的方法来做你真正想做的事情,你可以考虑一个单独的问题来概述目标,到目前为止你是如何接近它的,并寻求替代方案。

【讨论】:

  • resultSet 定义为:var resultSet="";(高于CreateDiv
【解决方案2】:

我建议您在调试时将代码分解为多个步骤。特别是您填充结果集的位置。在每个加号处分解它。然后你可以单步执行它,看看它是如何被填充的。

resultSet+="<br/><div id='";
resultSet+=rows.data[i].id;

等等。

其次,在查看源代码中查看运行它时页面上的外观。 HTML 看起来格式正确吗?

另外,我质疑 resultSet 中最后的&lt;\/script&gt; 是否正确。

【讨论】:

  • "另外,我在质疑 resultSet 中最后的 是否正确" 是的,结果字符串会是 "" 因为转义JavaScript 中的斜杠只会产生斜杠。这是防止 HTML 解析器在字符串中看到“”并过早终止出现该字符串的脚本块的常用方法。
【解决方案3】:

尝试用这个替换 createDiv 函数:

function CreateDiv(){
    resultSet += "<br/><div id='"+rows.data[i].id+"'></div>" + getComments(rows.data[i].id);
}

它应该可以完美运行。

【讨论】:

  • 这真的有效吗,@Sandhurst?我认为您仍然会遇到 T.J. 未定义变量的问题。在他的回答中指出。
  • 我不明白为什么有人对唯一直接且可接受的答案投了反对票。
  • 你最终会在resultSet字符串中出现字符串“undefined”(因为getComments没有返回值,所以调用它的结果是undefined )。如果这确实是 OP 想要的行为(我认为它是,因为这是公认的答案),最好将它与附加到字符串分开调用。
  • @T.J. Crowder 当然,但我假设作者正在尝试编写一个从getComments 返回字符串的函数。而且,var resultSet = ""; 启动变量。
  • 足够公平(假设)。 (我没有说resultSet 没有被初始化;至少,从一小时前Felix 指出我错过的那条线以来没有。)顺便说一句,我也不理解反对票,这似乎不合适。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-05-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多