如果 HTML 包含空格,则 JQuery HTML 未终止的字符串文字错误

Posted

技术标签:

【中文标题】如果 HTML 包含空格,则 JQuery HTML 未终止的字符串文字错误【英文标题】:JQuery HTML Unterminated String Literal Error If HTML Contains Spaces 【发布时间】:2017-02-04 03:08:12 【问题描述】:

通过将其设置为元素的 innerhtml 的一部分,此代码被插入到页面的 HTML 中。它创建了一个类似按钮的跨度,单击该跨度时会打开一个 JQueryUI 窗口,其中包含一些常量文本以及下方的文本“Thiswindow”。

string custom_training_html = "Thiswindow"; // Note this line here.
link = "<span class=\"start_course_button\" onclick=";
link += "javascript:$(\"#temp_test_window\").dialog(minWidth:800,minHeight:600);$(\"#temp_test_custom_html\").html('" + custom_training_html + "');>Test JQueryUI";
link += "</span>\n";

但是,如果我将文本“Thiswindow”更改为“This window”,我会得到:

SyntaxError: unterminated string literal

在此 HTML 中的任何位置出现的空格都会破坏代码。该站点上的其他问题说问题是 HTML 中的换行符,但我认为我没有任何问题。我只是在构建一个包含&lt;span&gt; 代码的字符串,工作版本和非工作版本之间的唯一区别是一个包含空格字符。怎么了?

仅供参考,打开的窗口如下所示:

<div id="temp_test_window" title="Chaucer's Prologue (The Monk)">
    A monk there was, one made for mastery<br />... [snip]
    <div id="temp_test_custom_html">Content Goes Here</div>
</div>

编辑:我已经清理了代码以将 JS 放入它自己的函数中,但这并没有解决问题。在我的主 .aspx 文件中,我有:

function GenerateTestTrainingContent(content)
            
                $('#temp_test_window').dialog(minWidth:800,minHeight:600);
                $('#temp_test_custom_html').html(content);
            
[and later, outside the <script> tags:]
<div id="temp_test_custom_html">Content Goes Here</div>

在 .aspx.cs 文件中,我有这段代码创建一些 HTML 作为“链接”:

link = "<span class='start_course_button' onclick=javascript:GenerateTestTrainingContent('OneWord');>";
link += "Test JQueryUI</span>\n";

这行得通,给我一个链接,它会召唤一个弹出式 JQueryUI 窗口,其中出现文本“OneWord”。但是,如果我在同一代码中将“OneWord”更改为“One Word”,我会得到:

SyntaxError: unterminated string literal
javascript:GenerateTestTrainingContent('One

同样,没有空格 = 有效,任何空格 = 无效。

【问题讨论】:

JavaScript 没有“字符串”变量定义之类的东西,你总是使用关键字“var”来定义这些...... 我应该注意到:上面的代码是创建 JS 的 C#。字符串变量是一个 C# 变量。 C# 错误提示字符串未正确终止。但它并没有指出具体的字符串或字符串的一部分。我怀疑您缺少 onclick 属性内容的引号包装器。我还建议将 JS 代码移到它自己的脚本块中以避免混淆。 【参考方案1】:

正如我在评论中提到的,我会将 JS 移动到它自己的 &lt;script&gt; 块中。我还将清理 "' 的使用,以减少混乱。

string custom_training_html = "This window"; // Note this line here.
string link = "";
link += "<span class='start_course_button'>Test JQueryUI</span>\r\n";
link += "<script>\r\n";
link += "$('#temp_test_window').dialog( autoOpen: false, minWidth:800, minHeight:600 );\r\n";
link += "$('#temp_test_custom_html').html('" + custom_training_html + "');\r\n";
link += "$('.start_course_button').click(function() $('#temp_test_window').dialog('open'); );\r\n";
link += "</script>\r\n";

【讨论】:

将 JS 移动到自己的块中并检查引号的使用是个好主意。但是,我仍然处于没有空格的字符串可以工作,但有空格的字符串不能工作的情况。查看编辑后的帖子。 @Snow 这真的很奇怪,但我认为它与 C# 相关,而不是 JS。我没有 ASP.NET 测试区,所以我无法真正测试问题的那个元素。您可能想要编辑您的帖子,包括有关您正在使用的 .NET Framework 等的详细信息。 @Snow 不能从分离的 JS 代码中调用click 事件吗?为什么要在onclick 属性中运行它? 你也试过编码字符串吗? link = "&lt;span class='start_course_button' onclick=javascript:GenerateTestTrainingContent('One%20Word');&gt;"; link += "Test JQueryUI&lt;/span&gt;\n";

以上是关于如果 HTML 包含空格,则 JQuery HTML 未终止的字符串文字错误的主要内容,如果未能解决你的问题,请参考以下文章

jquery $.trim()去除字符串空格详解

如果跨度包含少于 3 个字符,则使用 jQuery 隐藏跨度父级

如果包含空格的参数连接,但不使用 setString,则获取 resultSet

如果路径包含空格,则 Zip 中文件的 URI 不正确

使用 jQuery 选择 php 包含的 html 元素

如果表单字段包含空格,则Spring命令对象会抛出整数字段的NumberFormatException