控制台显示错误' Uncaught SyntaxError:Unexpected token ILLEGAL'当带有返回字符的字符串值 - 以下示例中的 - 在下面的简化代码中传递给函数时。当没有返回字符的字符串值(例如' hello world')被传递时,代码工作正常。我不明白为什么以及如何解决这个问题?
简化的功能代码:
var showSinglePrivateMessage = function(privatemessage,wrapper){
console.log('showSinglePrivateMessage()-theprivatemessage: '+privatemessage);
}//showSinglePrivateMessage
更新:添加了以下调用showSinglePrivateMessage
的函数:
var s_message_private_ref = function(theprivatemessage,wrapper){
console.log('s_message_private_ref()-theprivatemessage: '+theprivatemessage['postcontent']);
var testmessagecontent = theprivatemessage['postcontent'];//'een test message';
return '<a id="myprivate_s_messagelink" href="#" onclick="userapp.showSinglePrivateMessage(\'' + testmessagecontent + '\',\'' + wrapper + '\');">'+theprivatemessage['postsubject']+'</a>';
}//message_topic_ref
{p>示例字符串值(一些荷兰文;-))privatemessage
(从数据库中检索):
Beste Marie,
Uit onze administratie blijkt een achterstand van betaling.
Gelieve het verschuldigde bedrag van 23.12 over te maken binnen uiterlijk 7 dagen.
Met vriendelijke groet,
Mies
Administratie
答案 0 :(得分:0)
问题是,根据testmessagecontent
的内容,您生成的Javascript代码语法不正确。这通常是由未转义的内容引起的,包含引号或其他内容,因此您可以通过以下方式解决:
return '<a id="myprivate_s_messagelink" href="#" onclick="userapp.showSinglePrivateMessage(\''
+ testmessagecontent.replace(/'/g, "'").replace(/"/g, """)
+ '\',\'' + wrapper + '\');">' + theprivatemessage['postsubject'] + '</a>';
但我真的不建议走这条路。首先,您正在使用传统的活动注册。是否难以使s_message_private_ref
返回DOM元素而不是原始HTML字符串?
因为这会更清洁:
var s_message_private_ref = function(theprivatemessage, wrapper) {
console.log('s_message_private_ref()-theprivatemessage: '
+ theprivatemessage['postcontent']);
var testmessagecontent = theprivatemessage['postcontent'], //'een test message'
anchor = document.createElement("a");
anchor.id = "myprivate_s_messagelink";
anchor.href = "#";
anchor.innerHTML = theprivatemessage['postsubject'];
anchor.addEventListener("click", function() {
userapp.showSinglePrivateMessage(testmessagecontent, wrapper);
});
return anchor;
}//message_topic_ref
您可能正在使用s_message_private_ref
将元素附加到某个容器中。这样,不是附加一个字符串(你没有使用.innerHTML += ...
,不是吗?因为不要!),你附加一个DOM元素。
请记住,IE8及更低版本不支持addEventListener
,因此您要么测试attachEvent
,要么使用一些为您完成工作的框架,例如jQuery。
另外,请考虑事件委派。
最后,您确定要为用户生成的元素分配固定ID吗?