JQuery - 带引号的 after() 函数

JQuery - after() function with quotes

我需要在单选按钮后添加一些 HTML,我想添加一个图像和功能,所以我在单击单选按钮时选中它。我会用我自己的 selectRadioButton() 函数检查单选按钮。

现有代码是,我不能编辑这部分:

<span class="ms-RadioText">
  <input id="idFirstRadioButton" type="radio" name="idFirstRadioButton" value="1" />
</span>

我的想法是,为我的图像添加功能,是这样做的:

$("#idFirstRadioButton").after("Image 1:<br/><a href=\"javascript:selectRadioButton(\"idFirstRadioButton\")\"><img src=\"http://urltoimage/image.jpg\" border=\"0\"/></a>");

但是当我使用这段代码时,我页面的HTML是这样的:

<span class="ms-RadioText">
  <input id="idFirstRadioButton" type="radio" name="idFirstRadioButton" value="1" /> Image 1:<br/><a href="javascript:selectRadioButton(" shape="" idFirstRadioButton?)?=""><IMG src="http://urltoimage/image.jpg" border=0></a>
</span>

他正在添加 "shape="" idFirstRadioButton?)?="""

正确的代码应该是:

<span class="ms-RadioText">
   <input id="idFirstRadioButton" type="radio" name="idFirstRadioButton" value="1" /> Image 1:<br/><a href="javascript:selectRadioButton("idFirstRadioButton")><IMG src="http://urltoimage/image.jpg" border=0></a>
</span>

我已经尝试过使用 ',使用 \",两者的组合,使用一个变量,...

$("#idFirstRadioButton").after("Image 1:<br/><a href=\"javascript:selectRadioButton(\"idFirstRadioButton\")\"><img src=\"http://urltoimage/image.jpg\" border=\"0\"/></a>");
$("#idFirstRadioButton").after('Image 1:<br/><a href="javascript:selectRadioButton(\"idFirstRadioButton\")"><img src="http://urltoimage/image.jpg" border="0"/></a>');
$("#idFirstRadioButton").after('Image 1:<br/><a href="javascript:selectRadioButton("' + VARidFirstRadioButton + '")"><img src="http://urltoimage/image.jpg" border="0"/></a>');

我做错了什么或者我应该使用什么代码?

你做错的是使用 HTML 的字符串而不是自己构造和附加元素,这(除了潜在的安全问题之外)可能会导致你所遇到的那种令人困惑和烦人的行为看到这里。你想要这样的东西:

var myImg = $("<img/>");
myImg.attr("src", "http://urltoimage/image.jpg");
myImg.on("click", function(e) {
  selectRadioButton("idFirstRadioButton");
});
$("#idFirstRadioButton").after(myImg);

您应该在 .after 字符串中使用不同的引号,因为它们是必需的。例如:

$("#idFirstRadioButton").after("Image 1:<br/><a href=\"javascript:selectRadioButton('idFirstRadioButton')\"><img src=\"http://urltoimage/image.jpg\" border=\"0\"/></a>");

这是结果:

<a href="javascript:selectRadioButton('idFirstRadioButton')"><img src="http://urltoimage/image.jpg" border="0"></a>

但是,这仅适用于您别无选择的情况。正如@CBroe 提到的,您应该尽量不要在附加 html 内绑定事件处理程序,而应尝试使用正确的方式处理它们。 @Dan O 提供的示例似乎是您应该寻找的东西。

"' 的深度超过 1 级时,您需要插入或转义它们。

最后一个应该是正确的,除了你在里面一直使用 " 而不是转义它们或交替它们。

正确的应该是:

$("#idFirstRadioButton").after('Image 1:<br/><a href="javascript:selectRadioButton(\'' + VARidFirstRadioButton + '\')"><img src="http://urltoimage/image.jpg" border="0"/></a>');

所以我们从后面的单引号开始,然后是 href 的双引号,然后我们在 selectRadioButton 内部转义单引号,然后是单引号退出字符串并转储 var,然后回到弦内并继续。 Fiddle

NOTE: Remember to declare your var "VARidFirstRadioButton" that's the shape of error.