【问题标题】:Error : "identifier starts immediately after numeric literal javascript"错误:“标识符在数字文字 javascript 之后立即开始”
【发布时间】:2016-03-24 05:57:56
【问题描述】:
$(obj).replaceWith('<a class="fd-tool-li" onclick="javascript:Like(this, @Model.User.HOCODE.ToString(), @Model.CommentHOCODE.ToString());">' +
'<i class="icon-thumbs-up"></i><span> ' +UserCount+ ' Like this</span>'+
'<a name="Unlike"class="fd-tool-li" onclick="javascript:Unlike(this, @Model.User.HOCODE.ToString(), @Model.CommentHOCODE.ToString());">(Unlike?)</a>' +
'</a>');

为什么会出现这个错误?

【问题讨论】:

  • 我没有看到数字文字。那些@Model.etc.etc. 是什么东西?
  • Firebug 应该会在错误消息中准确地向您显示导致错误的原因。我的猜测是 @Model.User.HOCODE.ToString() 是在服务器端处理的,但这是一个猜测。

标签: javascript jquery


【解决方案1】:

简化您的代码以避免引用问题(并提高可读性)。从替换调用中提取 onclick javascript:

$(obj).html('<a class=fd-tool-li onclick="javascript:Like(this, @Model.User.HOCODE.ToString(), @Model.CommentHOCODE.ToString());">' +
    '<i class="icon-thumbs-up"></i><span> ' +1+ ' Like this</span>'+
    '<a name=Unlike class=fd-tool-li>(Unlike?)</a>' +
    '</a>'
);

$(obj).click(function() {
   // things
});

假设@Model 是由某种预编译器定义的,并且不存在于代码中。

【讨论】:

  • 哦,谢谢它为我工作:)
【解决方案2】:

如果这确实是您的代码在到达浏览器时的样子(与在服务器上处理的部分代码和进入浏览器的其他代码不同),那么您有@Model.CommentHOCODE.ToString() 的语法错误。你需要解决这个问题。标识符不能以 @ 开头。

如果它是在服务器端处理并替换为一系列字符,你可能需要在它周围加上引号,如果它真的是一个字符串。

同样,您是否有一个名为UserCount客户端变量?因为如果不是,并且如果没有在服务器端处理,那也可能是一个问题。

基本上,您需要查看该代码并确定服务器端发生了什么以及发送到客户端浏览器的结果是什么,然后确保发送到客户端浏览器的内容是有效的。

【讨论】:

    【解决方案3】:

    在我的例子中,我使用 UUID 来设置一个复杂的变量(一些东西 + UUID),我做的一个简单的解决方案是:

    将“-”替换为“”,标识符的唯一性保持有效。

    如果您使用 Razor (ASP.net) 而不是这样做:@Model.User.HOCODE.ToString() 尝试使用:@(Model.User.HOCODE.ToString())

    问候。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-11
      • 1970-01-01
      相关资源
      最近更新 更多