【问题标题】:how to access function in Json如何在 Json 中访问函数
【发布时间】:2014-02-13 16:59:55
【问题描述】:

我可以访问块末尾的 printButton 属性的 onclick 属性函数。虽然我无法在 exportButton 属性下启动 onclick 功能。我有以下代码。

B.exporting = {
    type : "image/png",
    url : "http://export.highcharts.com/",
    width : 800,
    enableImages : false,
    buttons : {
        exportButton : {
            symbol : "exportIcon",
            x : -10,
            symbolFill : "#A8BF77",
            hoverSymbolFill : "#768F3E",
            _titleKey : "exportButtonTitle",
            menuItems : [{
                textKey : "downloadPNG",
                onclick : function() {
                    this.exportChart()
                }
            }, {
                textKey : "downloadJPEG",
                **onclick : function() {
                    this.exportChart({
                        type : "image/jpeg"
                    })**
                }
            }, {
                textKey : "downloadPDF",
                onclick : function() {
                    this.exportChart({
                        type : "application/pdf"
                    })
                }
            }, {
                textKey : "downloadSVG",
                onclick : function() {

                    this.exportChart({
                        type : "image/svg+xml"
                    })
                }
            }
            }]
        },
         printButton : {
            symbol : "printIcon",
            x : -36,
            symbolFill : "#B5C9DF",
            hoverSymbolFill : "#779ABF",
            _titleKey : "printButtonTitle",

            onclick : function() {
                    this.print()
            }
        }
    }
};

我正在使用 jquery 插件将键盘控件绑定到单击事件,这是我用来打印的。这有效!:

Mousetrap.bind('ctrl+s', function(e) { B.exporting.buttons.printButton.onclick(this.print());   

});

这段代码是我试图在上面的json中的exportButton属性下访问一个单独的onclick函数

Mousetrap.bind('*', function(e) {B.exporting.buttons.exportButton.menuItems[0].onclick;});

我得到的结果是值,但我想像 onclick 属性一样运行函数。有人知道如何在 json 属性下运行函数吗?感谢大家的帮助。

【问题讨论】:

  • 据我所知,您不能用 JSON 传输函数。
  • 这不是 JSON,它是一个 Javascript 对象字面量。 JSON 是当您将对象转换为字符串时,您可以传输它、将其保存在文件中等。
  • 我认为你的 Ctrl-s 绑定是错误的——你不应该在绑定中调用 this.print(),它是在你调用的 onclick 函数中完成的。

标签: javascript json object properties highcharts


【解决方案1】:
Mousetrap.bind('click', B.exporting.buttons.exportButton.menuItems[0].onclick);

你的 ctrl-s 绑定看起来也有问题,应该是:

Mousetrap.bind('ctrl+s', B.exporting.buttons.printButton.onclick);

printButton.onclick 函数不带参数。您的绑定在调用printButton.onclick 函数之前调用this.print,然后调用printButton.onclick 函数 再做一次。

【讨论】:

  • 感谢您的更正 Barmar。 printButton 确实适用于您的方法。虽然 exportButton 仍然没有被绑定的键盘控件触发。在 objects 属性中,要下载的函数还传递了 type 属性的值。我们如何触发函数以与 onclick 响应相同的方式响应。有什么想法吗?
  • 我不确定您使用什么框架来绑定处理程序。它看起来不像 jQuery,这是我所知道的,但我认为将 click 放在那里会类似于 jQuery。
  • 我正在使用 JQuery 一个名为 mousetrap.js 的插件。该组件是在 svg 中动态绘制的,并且有一个点击事件。我想用键盘控件而不是鼠标单击来调用该函数。在 exportButton 中引用 onclick 时,我得到“对象不支持此属性或方法”。我知道这是因为我们在对象中引用函数的方式,但需要知道如何引用发送 type:application/pdf 的函数才能工作。
  • 在处理函数中,this 是点击事件的目标。如果要在其上调用jQuery或插件方法,则需要使用$(this).method()
  • 所以对象确实引用了这个调用,例如 onclick : function() { this.exportChart({ type : "image/svg+xml" }) 我想知道如何引用这个事件。在这种情况下,它是通过鼠标单击触发的。我想将键盘事件绑定到函数。
猜你喜欢
  • 1970-01-01
  • 2020-12-26
  • 2021-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多