我可以在Javascript / jQuery中使用变量作为键吗?

时间:2012-09-13 00:16:46

标签: javascript jquery

基本Javascript / jQuery问题:如何在键/值对中使用非文字键?我认为以下语法(下面)会解析,但事实并非如此。我正在尝试创建一个动态的对话框。我希望按钮文本是可变的。我怎么能用Javascript / jQuery做到这一点?或者我必须在我的.js文件上调用PHP? (所以不要这样做......)

function see_menu_custom(t1, m1, t2, m2, t3, m3, t4, m4, t5, m5)
{   
    $(document).simpledialog2(
    { 
        mode: 'button',
        headerText: 'Send Message',
        headerClose: true,
        showModal: true,
        animate: false,
        buttons :
        {
            t1: /******** How can I make this a nonliteral? *********/
            {
                click: function () { 
                    sendMessage(username, token, t1, m1);
                },
                iconpos : "right",
                icon : "arrow-r",
                theme : "e"
            },
...

4 个答案:

答案 0 :(得分:1)

使用bracket notation

buttons[var] = {};

答案 1 :(得分:1)

括号表示法是正确的答案,但是你似乎也在问如何传递它,就像这样构造

function see_menu_custom(t1, m1, t2, m2, t3, m3, t4, m4, t5, m5)
{   
    var myButtons = {};
    myButtons[t1] = {
        click: function () { 
            sendMessage(username, token, t1, m1);
        },
        iconpos : "right",
        icon : "arrow-r",
        theme : "e"
    };
    // rest of buttons
    ...
    // then pass into next step
    $(document).simpledialog2(
    { 
        mode: 'button',
        headerText: 'Send Message',
        headerClose: true,
        showModal: true,
        animate: false,
        buttons : myButtons, // here
...

答案 2 :(得分:0)

您只能对对象文字使用字符串,要使用必须使用方括号和赋值的表达式:

buttons[expression] = value;

答案 3 :(得分:0)

正如其他人所指出的那样,你不能用文字符号表示法。

但是,与将按钮放在数组中相比,我认为使用标题作为键是不太自然的表示:

function see_menu_custom(t1, m1, t2, m2, t3, m3, t4, m4, t5, m5)
{   
    $(document).simpledialog2(
    { 
        mode: 'button',
        ...
        buttons :
        [
            {
                label: 'My arbitrary string value',
                click: function () { 
                    sendMessage(username, token, t1, m1);
                },
                ...
                theme : "e"
            },
        ]