在JS参数中放置引号

Placing quotes in JS parameters

本文关键字:JS 参数      更新时间:2023-09-26

我正在为我的移动应用程序动态地用JS填充一个无序列表。我正在使用JQuery手机和Phonegap进行开发。

在我的列表中,我想在单击时调用一个带有参数的函数。我可以在不使用任何参数的情况下调用函数downloadPdf(),但如果我添加了这些参数,就无法调用。我认为这与引号/双引号有关。

var $li = $("<li><a href='#' onclick='downloadPdf('"+val.title+"', '"+val.url+"')'>"+val.title+"</a></li>");

我无法调试,因为我正在手机上运行这个程序,所以我希望有一个更训练有素的人能够看到这里出了什么问题。val.titleval.url都保存字符串类型的值。

不要使用内联事件。您使用的是jQuery,它可以很容易地附加事件

var li = $("<li><a href='#'>"+val.title+"</a></li>");
li.find("a").on("click", function(){ downloadPdf(val.title,val.url); });

或者使用数据属性和通用onclick处理程序

var li = $("<li><a class='download' href='#'>"+val.title+"</a></li>");
li.find("a").data("title", val.title).data("url", val.url);

和通用点击

$(document).on("click", "a.download", function (event) {
   var anc = $(this);
   downloadPdf( anc.data("title"), anc.data("url"));
   event.preventDefault();
}

@epascarello是对的,不要使用内联事件处理程序。

但直接回答这个问题就不用双引号了:

$("<li><a href='#' onclick='downloadPdf('""+val.title+"'", '""+val.url+"'")'>"+val.title+"</a></li>");

产品:

<li><a href='#' onclick='downloadPdf("value1", "value2")'>title</a></li>

退出报价

var val = {title: 'foo', url: 'http://foo'}
var $li = $('<li><a href="#" onclick="downloadPdf(''' + val.title + ''',''' +  val.url + ''')">' + val.title + '</a></li>');
  
function downloadPdf() {
 alert('params:' + JSON.stringify(arguments, null, 2));
}
$('body').append($li);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

或者为了更好地练习,请按照@epascarello的建议使用单击事件处理程序。

解决方案

首先,我建议将代码放在多行中,以便于阅读。

var $li = $(''
+ '<li>'
    + '<a href="#" onclick="downloadPdf('"' + val.title + ''", '"' + val.url + ''")">' + val.title 
    + '</a>'
+ '</li>');

我专门为这个糟糕的模板做这件事。

其次,您需要使用'"'' 转义引号


真正的建议

请注意epascarello在那里说的话。他的方式比一句话中逃离的混乱要好得多,也容易理解。