2013-10-16 47 views
12

运作如何将参数传递给JavaScript函数与'包括传递参数用单引号

var name ="Lauren O'Donald"; 

var htmlAnch='<a onclick="javascript:selectEmployee(1100,"'+name+'");return false;" 
       href="javascript:void(0);">O'Donald, Lauren</a>'; 

$(document).append($(htmlAnch)); 

JavaScript函数不执行,因为名称'Lauren O'Donald'包含单引号。

如何添加一个参数'并准备动态html使其工作?

这里是动态代码使用\产生

var rows = new StringBuffer(); 

$(data).each(function(index) { 
     rows.append(String.format('<tr><td><a href="No.aspx" 
       onclick="javascript:selectEmployee({3},\"{1} {2}\");return 
       false;">{0}</a></td></tr>', 
       String.format("{0}, {1}", this.Surname, this.FirstName), 
       this.Surname, 
       this.FirstName, 
       this.Id 
      )); 
    }); 
+0

使用反斜杠“\”逃单引号 – Raptor

回答

25

您可以通过预先\它逃脱报价/字符:

var string = 'my string with "double quotes" and \'single quotes\''; 
var string = "my string with 'single quotes' and \"double quotes\""; 
//            ^   ^

使用动态字符串:

var foo = "bar with 'quotes'"; 
var string = 'my string with "double quotes" and ' + foo.replace(/'/g, "\\'"); 
//my string with "double quotes" and bar with \'quotes\' 
+0

更新了代码。它动态生成 – Billa

+0

@Billa检查我的编辑。 – h2ooooooo

+0

太好了。它的作品:) – Billa

4

你可以逃脱它:

var htmlAnch='<a onclick="javascript:selectEmployee(1100,\'Lauren O\'Donald\');return false;" 
      href="javascript:void(0);">O\'Donald, Lauren</a>'; 

但是因为你已经标记与jQuery这个问题,一个更好的解决方案是挂钩一个事件给元素并使用data-*属性来存储相关信息,这将避免使用丑陋的onX属性。试试这个:

var $htmlAnch = $('<a />' { 
    text: "O'Donald, Lauren" , 
    data-id: 1100, 
    data-name: "Lauren O'Donald" 
}).click(function(e) { 
    e.preventDefault(); 
    selectEmployee($(this).data('id'), $(this).data('name')); 
}); 

$(document).append($htmlAnch); 
+0

+1用于显示的正确方法。 – georg

+0

我更新了动态生成的代码,而不是使用数据属性。请检查它 – Billa

0

尝试这样

var htmlAnch='<a onclick="javascript:selectEmployee(1100,\'Lauren O\'Donald\');return false;" href="javascript:void(0);">O\'Donald, Lauren</a>'; 
东西
1

写你自己的函数返回一个转义字符串。 Demo

将您的字符串作为参数传递给此函数,您将获得转义字符串。您还可以添加更多的字符到黑名单,如果你想逃避一些字符

function remove_quotes(values1) 
{ 
     var values = values1.toString(); 
     var str = ""; 
     var blockList = ['"','\'','\\']; // This is the list of key words to be escaped 
     var flag = 0; 
     for(var i = 0;i<values.length;i++) 
     { 
      for(var j=0;j<blockList.length;j++) 
      { 
       if(values[i] == blockList[j]) 
       { 
        flag = 1; 
        break; 
       } 
      } 
      if(flag == 0) 
      str += values[i]; 
      else 
      { 
       str += '\\'; 
       str += values[i]; 
       flag = 0; 
      } 
     } 
     return str; 

    }