【问题标题】:Inline JS, how to escape a quote in a function parameter?内联JS,如何在函数参数中转义引号?
【发布时间】:2014-01-30 15:23:48
【问题描述】:

这是 JavaScript 中的错误吗? http://jsfiddle.net/SommerEngineering/mr8sZ/

<a href='javascript:test("test")'>Works</a><br/>
<a href='javascript:test("test&quot;")'>Does not work</a>

它看起来像JS进入字符串,将&amp;quot;转换回"然后尝试执行命令,这当然是错误的。

【问题讨论】:

  • 这根本不是 JS 相关的。那是一个 HTML 实体。

标签: javascript html quotes


【解决方案1】:

你是对的。你在那里写的是html,所以html实体&amp;quote;被渲染为双引号",然后作为JavaScript执行。因为test("test""); 不是有效的javascript,这将引发错误。如果你想将test" 传递给函数,你可以像这样转义引号:test("test\"");

内联 JavaScript 不是一个好的做法,并且存在大量不直观的问题。阅读其中一些结果:Why is inline JS bad?

以下是如何正确执行此操作的示例。

var a = document.getElementById('myElem');

a.addEventListener('click', function() {
  test('test"');
});

请注意,获取元素引用的方法有很多种,您可能希望使用类并将处理程序附加到循环中。

【讨论】:

    【解决方案2】:

    这不是 js 错误,实际上是 html 行为。 &amp;quot; 是一个 html 实体,在执行 js 之前会被解码为 "

    无论如何,避免在html中嵌入js,这不是一个好习惯,你的情况是一个原因。

    【讨论】:

      【解决方案3】:

      这不是错误。双引号起作用是因为 HTML 属性有单引号。但是,&amp;quot; 实体是由 HTML 评估的,因此传递给 JavaScript 引擎的数据是:

      javascript:test("test"")
      

      如果你想转义引号使用

      javascript:test("test\"")
      

      \ 转义了引号。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-02-03
        • 2011-10-29
        • 1970-01-01
        • 1970-01-01
        • 2013-03-30
        • 2015-09-06
        • 2020-03-14
        相关资源
        最近更新 更多