在 HTML 属性中调用带有字符串参数的函数的正确语法是啥? [复制]

Posted

技术标签:

【中文标题】在 HTML 属性中调用带有字符串参数的函数的正确语法是啥? [复制]【英文标题】:What's the proper syntax for calling a function with a string parameter in an HTML attribute? [duplicate]在 HTML 属性中调用带有字符串参数的函数的正确语法是什么? [复制] 【发布时间】:2021-06-29 16:40:58 【问题描述】:

我在这个 javascript 方法中生成了几个按钮,其中一个有 onclick() 处理程序,我需要在其中传递一个字符串作为输入参数。

function ShowButtons() 
  let $previewDiv = $("#ServicesPreview");
  $previewDiv.html("<button id='myBtn' onclick='CheckID('MYID')'></button>")

我无法将字符串括在单引号中,因为它会在网站上生成此字符串,并且我收到错误“Unexpected end of input”:

<button id="myBtn" onclick="CheckID(" MYID')'></button>

我也尝试过不使用引号,并且我不能使用双引号,因为这会终止传递给 jQuery.html 方法的字符串。这里的正确语法是什么?

【问题讨论】:

$previewDiv.html(`&lt;button id="myBtn" onclick="CheckID('MYID')"&gt;&lt;/button&gt;`) 有点跑题了:我该怎么做你不会(不再)。使用适当的事件处理程序并通过数据属性传递您的数据,例如$previewDiv.html("&lt;button id='myBtn' data-id='MYID'&gt;&lt;/button&gt;"); $("#myBtn").click(function() var id = $(this).data("id"); CheckID(id); ); @JaromandaX 使用反引号有效!我不熟悉那种语法!谢谢! @HereticMonkey & James:我能够通过用反引号括住外部字符串来使其工作。这是我在问这个问题之前不熟悉的 javascript 语法。 【参考方案1】:

freedomn-m 的评论是正确的:您最好使用 JavaScript 设置点击处理程序。我会更像这样:

function ShowButtons() 
  let $button = $("<button></button>");
  $button.click(() => CheckID("MYID"));
  $("#ServicesPreview").empty().append($button);

从长远来看,您会发现这种模式为您的代码组件化提供了更大的灵活性。最好避免依赖 HTML ID,因为它们在 DOM 中必须是唯一的,所以它们有点像全局变量。

但如果你必须坚持你所询问的模式,解决引号中的引号的方法是转义它们所在上下文的引号。因为你的引号是在 HTML 中,您可以使用 HTML 转义:

function ShowButtons() 
  let $previewDiv = $("#ServicesPreview");
  $previewDiv.html("<button id='myBtn' onclick='CheckID(&quot;MYID&quot;)'></button>")

或者,由于您使用的是 JavaScript,您可以转义 JavaScript 双引号。

function ShowButtons() 
  let $previewDiv = $("#ServicesPreview");
  $previewDiv.html("<button id='myBtn' onclick='CheckID(\"MYID\")'></button>")

或者您可以首先使用反引号,这样双引号就不需要转义了。

function ShowButtons() 
  let $previewDiv = $("#ServicesPreview");
  $previewDiv.html(`<button id='myBtn' onclick='CheckID("MYID")'></button>`)

【讨论】:

反引号是我尝试过的,它奏效了。感谢您的反馈。

以上是关于在 HTML 属性中调用带有字符串参数的函数的正确语法是啥? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

Unity 单元测试 - 检查带有参数的函数调用是不是引发异常

在 C++/CLI 中,如何声明和调用带有“out”参数的函数?

如何在 VBA 中调用带有列表和另一个参数的函数?

LUA:如何正确读取带有重音字母和变音符号的 UFT8 文件名和路径?

WebAssembly:从 JavaScript 中的参数(带有内存地址)获取字符串的正确方法

Matlab调用不带括号的函数