将带有特殊字符的字符串值传递给函数Javascript

时间:2011-05-06 18:05:33

标签: javascript jquery html

我有一个需要全名作为输入的函数,这个名字可以有连字符,apotrohpe,逗号等。

function AddOtherRefDoc(name, number) {
    var remove = "<a \href='javascript:void(0);' onclick='removeRefDoctor(this,'"+name+"',"+number+");'\">Remove</a>";
    var html = "<li><b> Referral Doctor: </b>"+name+"<b>, Referral No: </b>"+number+ " " +remove+" <input type='text' name='ref_docs' value='"+name+"'></input><input type='text'  name='ref_nos'  value='"+number+"'></input></li>";

    jQuery(opener.document).find("#r_docs").append(html);

}

我将名称传递给removeRefDoctor()的方式,它不起作用。如何将此名称包装成一个字符串,以便该函数可以接受此值。

非常感谢你的帮助。

3 个答案:

答案 0 :(得分:2)

如果你为这两个变量重新实现它,你会更容易阅读和修复:

var remove = $("<a/>")
    .attr('href', 'javascript:void(0);')
    .click(function() {
        removeRefDoctor(this,name,number);
     })
     .text('Remove');

答案 1 :(得分:0)

我在第二行看到了一些错误。

使用此

var remove = "<a href=\"javascript:void(0);\" onclick=\"removeRefDoctor(this,"+name+","+number+");\">Remove</a>";

答案 2 :(得分:0)

您使用单引号引用onclick属性并引用函数中传递的name值。这会提前关闭您的onclick属性。您的name值中也可能包含单引号。您需要在名称值周围使用双引号,并且还要转义任何引号以避免html解析问题。同样,您需要使用name作为<input />

的值来转义引号
var attrName = name.replace(/'/g, '&#39;');
var jsName = attrName.replace(/"/g, '\\"');

在你的函数中使用它:

function AddOtherRefDoc(name, number) {
    var attrName = name.replace(/'/g, '&#39;');
    var jsName = attrName.replace(/"/g, '\\"');

    var remove = "<a \href='javascript:void(0);' onclick='removeRefDoctor(this,\""+jsName +"\","+number+");'\">Remove</a>";
    var html = "<li><b> Referral Doctor: </b>"+name+"<b>, Referral No: </b>"+number+ " " +remove+" <input type='text' name='ref_docs' value='"+attrName+"'></input><input type='text'  name='ref_nos'  value='"+number+"'></input></li>";

    jQuery(opener.document).find("#r_docs").append(html);

}

这就是为什么你的代码没有按预期工作的答案。话虽如此,我会选择Mike Thompson的方法。这更有意义,并为您解决了很多问题。