将返回字符的字符串值传递给javascript函数会导致错误

时间:2014-03-14 12:55:54

标签: javascript

控制台显示错误' 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

1 个答案:

答案 0 :(得分:0)

问题是,根据testmessagecontent的内容,您生成的Javascript代码语法不正确。这通常是由未转义的内容引起的,包含引号或其他内容,因此您可以通过以下方式解决:

return '<a id="myprivate_s_messagelink" href="#" onclick="userapp.showSinglePrivateMessage(\''
       + testmessagecontent.replace(/'/g, "&#39;").replace(/"/g, "&#34;")
       + '\',\'' + 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吗?