【问题标题】:javascript, curly brace in onclick dont work?javascript,onclick中的花括号不起作用?
【发布时间】:2011-05-27 12:49:21
【问题描述】:

已解决,服务器端吃了我的 {}。

我的 HTML 中有这段代码:

onclick="changes = {'a': 'b'};"

这转换为

onclick="changes = ;"

当我加载页面时。所以花括号和中间的一切都消失了。知道如何解决这个问题吗?最终,我想给一个匿名对象作为函数的输入:

onclick="dothis({'a': 'b', '1': '2'});"

【问题讨论】:

  • 你的意思是服务器在发送到浏览器之前把它们去掉?你在用什么服务器端?
  • 我只是在 FF 和 IE9 中快速尝试了一下。对我来说,onclick 保持不变:

    New

  • 不这么认为,但会检查一下。
  • 创建了一个jsFiddle。在 Chrome 上对我来说效果很好。但是你应该接受@Eli 的建议,而不是依赖内联事件处理程序。
  • 请删除此问题或自己写一个答案并接受。

标签: javascript curly-braces


【解决方案1】:

我的建议是让您的代码更加语义化,让您的输入跟踪数据,但实际的绑定和执行是分开的:

<div id="myDiv" data-changes="{'a':'b', '1':'2'}"></div>


document.getElementById('myDiv').onclick = function() {
    var data = JSON.parse(this.getAttribute('data-changes'));

    // here you should be able to say data.a, data.1, etc.
};

大多数现代浏览器都支持原生 JSON 方法:

Browser-native JSON support (window.JSON)

但对于那些不支持的,您可以使用 JSON 库添加支持:

https://github.com/douglascrockford/JSON-js

【讨论】:

    【解决方案2】:

    您是否考虑过/是否能够不使用内联 JavaScript?只需有一个外部 JavaScript 文件,该文件会加载类似(不是实际代码,例如):

    getElementById("myButton").click( function(){
       dothis({'a':'b','1':'2'})
    })
    

    类似的东西(尤其是与库配对时)还可以让您不必在要运行该函数的每个项目中复制代码。

    【讨论】:

    • 请注意给出的示例是伪代码,而不是实际工作的东西。
    猜你喜欢
    • 1970-01-01
    • 2014-11-23
    • 1970-01-01
    • 1970-01-01
    • 2022-12-07
    • 1970-01-01
    • 1970-01-01
    • 2016-08-04
    • 1970-01-01
    相关资源
    最近更新 更多