通过新控件中的jquery单击函数传递变量参数

时间:2014-12-05 03:33:47

标签: jquery json

在浏览器中,我将json数据流转换为一组类似于表中行的div,其中的跨度类似于行中的单元格。

其中一个跨度是一个帮助按钮,需要有一个点击功能,需要有一个参数来识别要显示的帮助信息。该参数来自json" row"数据

构建"行"的代码和"细胞"工作正常,除了这里显示的帮助按钮:

    var wrkNameOrIDCode 

    // in this next, wrkData[i] is the "row", 
    // and wrkData[i]["NameOrIDCode"] produces the correct help code value

    wrkNameOrIDCode = wrkData[i]["NameOrIDCode"]  

    $wrkHelpBtn = $('<span>', {  // this is the gelp button element
    id: "ACTV_" + i.toString() + "_HelpBtn",
    click: (function () {
                RspHelp(wrkNameOrIDCode, "-"); // the "normal" way to call the help function
                return false;
            }),
    }),
    class: "ARC_Help",
    html:"?"
    })

上述情况不起作用,因为它总是发送最后一行的值:

wrkNameOrIDCode = wrkData[i]["NameOrIDCode"]

我也尝试使用这样设置的点击功能:

click: ({ param1: wrkNameOrIDCode },
   function () {
   RspHelpFromActv();
   return false;
   }),

// then, elsewhere
function RspHelpFromActv(event) {
    RspHelp(event.data.param1, "-")
}

然而,第二种情况并不起作用,因为它说当事件到达RspHelpFromActv时未定义事件。

我已经了解了对局部变量的需求,并且如图所示,我尝试使用jquery数据函数,但没有快乐。

任何有关此的帮助将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:0)

你的谜题是由于这一行:

RspHelp(wrkNameOrIDCode, "-");

它调用名为“RspHelp”的函数传递名为“wrkNameOrIDCode”的变量的值。您遇到的问题是,当您通过循环构建行时,此变量会发生变化,并且在循环结束时,变量将保持其最后值。因此,当调用该函数并且它传递变量的“当前”值时,您将得到您不想要的结果。诀窍是在定义时传递有效变量的值

使用jQuery.proxy函数可以实现此手杖。

例如:

click: $.proxy(function(currentWrkNameORIDCode) {
    RspHelp(currentWrkNameORIDCode, "-"); // the "normal" way to call the help function
    return false;
}, this, wrkNameOrIDCode);

注意:我没有对此进行语法检查,因此请仅将其用于说明。我建议详细研究jQuery.proxy()函数。