2012-07-29 58 views
3

我需要将可能包含特殊字符的字符串传递给JavaScript函数,如下所示。向javascript函数提供可能包含特殊字符的字符串参数

function setEditMode(countryName, countryCode) 
{ 
    document.getElementById("txtCountryName").value=countryName; 
    document.getElementById("txtCountryCode").value=countryCode;   
} 

<input id="txtCountryName" name="txtCountryName" type="text" maxlength="50"/><br/> 

<input id="txtCountryCode" name="txtCountryCode" type="text" maxlength="2"/><br/>    

<input type="button" value="Submit" id="btnEdit" name="btnEdit" onclick="setEditMode('&#039;xx&#039; &#034;yy&#034; # $', '&#034;&#039;');" /> 

当按钮被点击类型字符串的两个参数包含特殊字符需要被供给到setEditMode() Javascript函数。字符串需要被转义。我曾尝试使用escape()函数,但它不起作用。有没有办法将这些参数传递给函数? (我正在处理JSP)。

[setEditMode()函数的那些参数分别对应于'xx' "yy" # $"' ]。

回答

2

您在示例中显示的参数包含html实体。你想解码他们吗?有在Javascript没有原生的方法,这样做,但你可以使用下面的代码片段(需要的jQuery):

$("<div>").html("&#034;").html(); 

你的情况:

var countryName = $("<div>").html(countryName).html(); 
var countryCode = $("<div>").html(countryCode).html(); 

或者使用一个通用的功能:

function decodeHtmlEntities(value) 
{ 
    return $("<div>").html(value).html(); 
} 

function setEditMode(countryName, countryCode) 
{ 
    document.getElementById("txtCountryName").value=decodeHtmlEntities(countryName); 
    document.getElementById("txtCountryCode").value=decodeHtmlEntities(countryCode);   
} 

或者使用此功能:http://phpjs.org/functions/html_entity_decode:424 如果您没有用jQuery创建div标签的心情。

编辑:根据您的评论。在内联脚本中似乎是"'的实体有问题。您可以通过调用这样的方法解决这个问题:

<input type="button" value="Submit" id="btnEdit" name="btnEdit" onclick="setEditModeWrapper()" /> 
<script type="text/javascript"> 
    function setEditModeWrapper() 
    { 
     setEditMode('&#039;xx&#039; &#034;yy&#034; # $', '&#034;&#039;'); 
    } 
</script> 

而且随着如果你想那些'在输入字段进行解码上面的解码功能相结合这一解决方案。

或者更优雅:

<input type="button" value="Submit" class="submitBtn" id="btnEdit" name="btnEdit" data-countryname="&#039;xx&#039; &#034;yy&#034; # $" data-countrycode="&#034;&#039;" /> 

<script tyoe="text/javascript"> 
$(".submitBtn").on("click", function(e) 
{ 
    var btn = $(e.currentTarget); 
    var countryName = btn.attr("data-countryname"); 
    var countryCode = btn.attr("data-countrycode"); 
    setEditMode(countryName, countryCode); 
}); 
</script> 

放置在页面底部的脚本标记,它会处理基于他们的数据COUNTRYNAME和数据COUNTRYCODE属性所有的提交按钮。以与在onclick处理程序中呈现数据相同的方式呈现它们。

+0

的'setEditMode()'funtion ** **本身不被调用,因为特殊字符在其参数'setEditMode( '' XX ' " YY "#$', '" '');'。我怎样才能调用它? Internet Explorer说'预期')''。 – Tiny 2012-07-29 01:42:35

+0

您是如何将参数传递给setEditMode('...','...')'的?你能告诉我吗? – Tiny 2012-07-29 02:05:30

+0

尝试在我的编辑中添加的代码。似乎是内联脚本中的“and”的实体问题,如果将它移动到上面的函数中,它将起作用,但有些更详细。 – 2012-07-29 02:06:27

相关问题