【问题标题】:Passing an object-string to a javascript-function将对象字符串传递给 javascript 函数
【发布时间】:2010-02-03 17:15:57
【问题描述】:

我正在尝试传递这样的字符串:

{"key":["value"],"key2":undefined,"key3":undefined,"key4":undefined,"key5":"value"}

到这样的 javascript 函数:

<a href="#" onClick="myFunction(myString);">

但无法正确转义。有没有办法将该对象字符串传递给函数,还是我需要转换一些东西?

您好, 选择0r

【问题讨论】:

    标签: javascript string object


    【解决方案1】:

    尝试:

    var myString = '{"key":["value"],"key2":undefined,"key3":undefined,"key4":undefined,"key5":"value"}';
    


    编辑:

    根据您最近的评论,我回到浏览器并尝试了这个(对我有用):

    <a href="#" onClick="myFunction({'key':['value'],'key2':undefined,'key3':undefined,'key4':undefined,'key5':'value'});">
    

    更改意味着它不再作为字符串传递,而是作为对象参数传递给 myFunction。

    【讨论】:

    • 我之前尝试过,但没有成功:我收到“未终止的字符串文字”错误。问题是 Javascript 不会在该上下文中执行(特殊的 Dojo 模板,IE6 忽略了那里的 Javascript),并且由于所有 Javascript 都需要进入“onclick”,因此已经有引起错误的引号 ...
    • 谢谢,如果我只能在将 myString 传递给 myFunction 之前对它执行 str.replace 操作,我想 对我有用。 myString 通过 AJAX 请求传递,我无法更改结果,所以我坚持使用 myString,所以我唯一的机会可能是首先生成数据的不同方法......
    【解决方案2】:

    正如 Naeem 所说,您可以将字符串括在单引号中。单引号和双引号的区别是这样的:

    单引号:

    • 可以包含双引号而不停止字符串
    • 不能包含换行符等字符
    • 可以通过\' 包含单引号

    双引号:

    • 可以包含单引号而不停止字符串
    • 可以包含换行符和其他特殊字符
    • 可以通过\" 包含双引号

    【讨论】:

    • 我想我只是有太多引号 :) 代码看起来像: onclick="myFunction('{key"... 而最后一个引号属于字符串并终止 onclick-引用。正如我在上面评论的:在这种特殊情况下,所有 Javascript 都需要在 onclick 内 - 现在我不知道,如果这可能的话。
    【解决方案3】:

    我找到了一个解决方案,Naeem Sarfraz 让我走上了正确的道路 - 它不会赢得选美比赛,但它确实有效:

    因为我可以在我所在的上下文中执行 PHP(但 IE6 会忽略 Javascript),所以我用 PHP 对单引号/双引号做了一些替换。

    $data = stripslashes(unserialize($data));
    $data = addcslashes($data, "'");
    $data = str_replace('"', "'", $data);
    

    这将去除所有斜杠,只为单引号添加斜杠,最后用单引号替换双引号。

    现在 myString 处于可以在 onclick 中传递给 Javascript 函数的状态,而不会引起引用冲突:

    <a href="#" onClick="myFunction(<?php print $data; ?>);">
    

    感谢您的贡献!

    【讨论】:

    • 我过去使用的一个技巧是将 JSON 字符串放入不可见元素中。然后您可以使用 onclick="myFunction(eval($('#myDiv').html()))"... 我不确定这是否会使您的实现变得更容易或更难(另外,示例确实需要 jQuery)。
    • 我想我现在坚持我的替代品,但我会记住这一点,谢谢。我不使用 jQuery,但使用 Dojo,所以类似于你的实现应该没什么大不了的。
    【解决方案4】:

    如果你可以在这个&lt;a&gt;元素之前生成代码,你可以试试这个:

    <script type="text/javascript">
    var myObj = {"key":["value"], "key2":undefined, "key3":undefined, "key4":undefined, "key5":"value"};
    </script>
    <a href="#" onClick="myFunction(myObj)">
    

    【讨论】:

    • IE6 在这种情况下完全忽略了 Javascript,所以我不能采用这个解决方案。
    猜你喜欢
    • 2018-08-25
    • 2013-01-21
    • 2011-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多