【问题标题】:Supplying string parameters that may contain special characters to a javascript function向 javascript 函数提供可能包含特殊字符的字符串参数
【发布时间】:2012-07-29 01:12:54
【问题描述】:

我需要将可能包含特殊字符的字符串传递给 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" # $和"' 分别]。

【问题讨论】:

    标签: javascript escaping


    【解决方案1】:

    您在示例中显示的参数包含 html 实体。你想解码它们吗? Javascript 中没有本地方法可以做到这一点,但您可以使用以下代码 sn-p(需要 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>
    

    将脚本标签放在页面底部,它将根据数据国家名称和数据国家代码属性处理所有提交按钮。以与在 onclick 处理程序中呈现数据相同的方式呈现它们。

    【讨论】:

    • setEditMode() 函数本身 未被调用,因为其参数 setEditMode('&amp;#039;xx&amp;#039; &amp;#034;yy&amp;#034; # $', '&amp;#034;&amp;#039;'); 中有特殊字符。我该如何调用它? Internet Explorer 显示Expected')'。
    • 你是如何将参数传递给setEditMode('...', '...')的?请给我看看好吗?
    • 试试我在编辑中添加的代码。似乎是内联脚本中 " 和 ' 的实体存在问题。如果将其移至上述函数,它将起作用。不过有点冗长。
    • 这些值(setEditMode() 的参数)来自 数据库。因此,我需要在单击按钮后立即传递它们。 [即参数在运行时确定]。
    • 应该没问题。只需在 setEditModeWrapper() 中而不是在 中渲染参数。从数据库中呈现值的代码看起来如何?
    猜你喜欢
    • 1970-01-01
    • 2020-12-25
    • 1970-01-01
    • 2017-02-13
    • 1970-01-01
    • 1970-01-01
    • 2016-08-01
    • 1970-01-01
    • 2020-07-12
    相关资源
    最近更新 更多