【问题标题】:Javascript not calling function because syntax errorJavascript没有调用函数,因为语法错误
【发布时间】:2015-02-20 06:13:35
【问题描述】:

在 C# 中,我正在为 div 的设计创建字符串,并在其中调用 javascript 函数,然后将其附加到 div。

在c#中我做了如下:

innerHTML.Append(@"<div  onmouseover=""javascript:ShowColor('" + Convert.ToString(dt.Rows[i]["sku"]) + @"');""  class='thumbnail slide'><a   onclick='window.open('" + link + "',''_self'')' ><img src='http://www.DimpleChild.com/Images/" + dt.Rows[i]["Image"].ToString().Trim() + ".jpg' height='50' width='50'></a><span style='font-family: Tahoma, Geneva, sans-serif;font-size: 12px;'>$" + Convert.ToString(dt.Rows[i]["price"]) + "</span></div>");

这里有锚标记为:

<a   onclick='window.open('" + link + "',''_self'')' >

这里 window.open 没有被调用,因为有些语法问题。

当我在 chrome 中执行 inspect element 时:

<a onclick="window.open("www.sitename.com/sku="" 120pbootcat11',''_self'')'="">

如何在 C# 中对其进行格式化,以便正确查看。???

编辑 1

错误:

【问题讨论】:

    标签: javascript c# jquery html


    【解决方案1】:

    如果使用单引号来分隔属性,则需要在其内部使用双引号。如果使用双引号来分隔属性,则需要在其内部使用单引号。

    试试这个:

    innerHTML.Append(@"<div onmouseover=""javascript:ShowColor('" + 
         Convert.ToString(dt.Rows[i]["sku"]) + 
         @"');"" class='thumbnail slide'><a onclick=""window.open('" + 
         link + 
         @"', '_self')"" ><img src='http://www.DimpleChild.com/Images/" + 
         dt.Rows[i]["Image"].ToString().Trim() + 
         @".jpg' height='50' width='50'></a><span style='font-family: Tahoma, Geneva, sans-serif;font-size: 12px;'>$" + 
         Convert.ToString(dt.Rows[i]["price"]) + 
         @"</span></div>");
    

    另一方面,我强烈建议将值放入data-... 属性中,并在脚本文件中设置脚本事件,并使用类+ CSS 文件而不是style 属性。这太可怕了。

    【讨论】:

    • @CuteChild 您需要在",', '_self''... 部分之前添加一个@。请尝试我的最新代码。
    【解决方案2】:

    你目前写过

    <a   onclick='window.open('" + link + "',''_self'')' >
    

    问题在于您要终止在window 之前开始的引号,因此完整的字符串是'window.open('

    您可以通过多种方式解决问题。一种方法在这里

    <a   onclick='window.open(\"" + link + "\",'_self')' >
    

    我在生成的字符串中添加了双引号,这样它就不会终止您之前开始的单引号字符串。我还用\ 转义它,这样它就不会终止我在C# 中开始的双引号字符串。哇,这很复杂,我知道。

    另一种更简单的方法是在 C# 中使用 String.Format() 函数。

    上面的代码可以写成

    var generatedHTML = String.Format("<div  onmouseover='javascript:ShowColor(\"{0}\");'  class='thumbnail slide'><a   onclick='window.open(\"{1}\",\"_self\")' ><img src='http://www.DimpleChild.com/Images/{2}.jpg' height='50' width='50'></a><span style='font-family: Tahoma, Geneva, sans-serif;font-size: 12px;'>${3}</span></div>", Convert.ToString(dt.Rows[i]["sku"]), link, dt.Rows[i]["Image"].ToString().Trim(), Convert.ToString(dt.Rows[i]["price"]));
    
    innerHTML.Append(generatedHTML);
    

    我认为从 C# 生成干净的 HTML/Javascript 代码的更简单的方法是使用 Razor 之类的模板引擎。它已在新的 ASP.NET 项目中预配置,甚至可以独立使用。

    【讨论】:

      【解决方案3】:

      我建议对这么长的字符串使用String.Format。 还要与您对"' 的使用保持一致。 我总是喜欢将" 用于 HTML 属性,将' 用于 javascript 字符串。

      这是使用 String.Format 时的样子:

      innerHtml.Append(
          String.Format(
              @"<div onmouseover=""javascript:ShowColor('{0}');"" class=""thumbnail slide"">
                  <a onclick=""window.open('{1}','_self')"" >
                      <img src=""http://www.DimpleChild.com/Images/{2}.jpg"" height=""50"" width=""50"">
                  </a>
                  <span style=""font-family: Tahoma, Geneva, sans-serif; font-size: 12px;"">${3}</span>
              </div>"
              , dt.Rows[i]["sku"].ToString()
              , link
              , dt.Rows[i]["Image"].ToString().Trim()
              , dt.Rows[i]["price"].ToString()
          )
      );
      

      我想说这更具可读性,并且引用错误不会经常发生。 在 HTML 中它看起来像:

      <a onclick="window.open('http.//example.com/', '_self')"></a>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-06-30
        • 1970-01-01
        • 2015-05-30
        • 2018-05-05
        • 2014-08-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多