如何在Javascript / jQuery中将对象引用传递给函数?

时间:2013-04-02 20:08:45

标签: javascript jquery

我在数据工具中有两个函数 - showEditDv(object)editDv(object)。如果您还没有猜到,Dv代表数据值。单击编辑数据图标时会调用showEditDv。它会生成Opentip工具提示,允许您编辑数据,并在onclick属性中调用如下:showEditDv(this);。这是该函数的代码(不,实际上没有内联注释):

function showEditDv(object) {
    var name = $(object).attr("data-name"); // string(name) now holds the name of the data value
    var input = new Opentip($(object), {target: null, showOn: null, hideTrigger: "closeButton"});
    input.setContent("<label>Name:</label><input type='text' value='" + name + "' class='dv-add-name' /><label>Value:</label>input type='text' class='dv-add-value' value='" + data[name] + "' /><button onclick='editDv(" + $(object) /*<-- problem */ + ");'>Apply</button>");
    input.show();
}

“应用”按钮调用editDv()函数时出现问题。因为对象是在字符串中引用的(我认为!),对象引用打印为[object Object],并且该函数无法隐藏Opentip,因为它没有对它的引用。以下是editDv()的代码:

function editDv(object) {
    var input = $(object).data("opentips")[0]; // data("opentips") is an array of objects
    input.hide();
}

所以我的问题是:如何将input对象从showEditDv传递给editDv作为参数,还是有更好的方法完全执行此操作?

1 个答案:

答案 0 :(得分:2)

不要使用onclick事件内联调用函数,而是使用jQuerys .on()函数:

像这样:

function showEditDv(object) {
    var name = $(object).data("name"); // use .data()
    var input = new Opentip($(object), {target: null, showOn: null, hideTrigger: "closeButton"});
    input.setContent("<label>Name:</label><input type='text' value='" + name + "' class='dv-add-name' /><label>Value:</label>input type='text' class='dv-add-value' value='" + data[name] + "' /><button class='callEditDv'>Apply</button>");
    input.show();
}

$('.callEditDv').on('click', function() {
    // access the button like this: $(this)
});