0

基本的 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

4 回答 4

1

使用括号表示法

buttons[var] = {};
于 2012-09-13T00:17:54.347 回答
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
...
于 2012-09-13T01:00:15.513 回答
0

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

buttons[expression] = value;
于 2012-09-13T00:19:25.767 回答
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"
            },
        ]
于 2012-09-13T00:53:27.150 回答