通过字符串将html对象传递给函数

时间:2013-08-25 14:34:44

标签: javascript

我猜我有点不寻常。我有这个函数deleteItem,它被点击触发并具有以下参数

function dItem(type,id,element,confirmed){
    if(confirmed){
        handle delete function
    }else{
        var c = ',';
        popup('Are you sure you want to delete this item?',
            {
                "Yes":"dItem('"+type+"'"+c+id+c+element+c+true+")",
                "Cancel":"popupClose()"
            }
        )
    }
}

.. onclick='dItem("comment",15,this,false)' ..

popup()的第二个参数中传递要在弹出窗口中显示的按钮和它们分别调用的功能。问题是elementHTMLDIV element,我无法找到一种通过字符串传递它的简洁方法。我能想到的唯一解决方案是让一个全局变量保持有问题的元素并且根本不传递它,尽管我真的不想这样做,因为它更像是一个黑客而不是解决方案。有没有人知道如何通过字符串传递该元素?提前谢谢!

编辑

这是按钮对象b的处理方式,并转换为HTML。您是否看到我如何使用实际功能提供它而不仅仅是字符串形式的名称?

var _b = '';
for(var i in b){
    _b+="<div onclick='"+b[i]+"'>"+i+"</div>";
}

1 个答案:

答案 0 :(得分:2)

通过回调处理这种情况更为常见。您需要更改弹出功能才能正常工作。

示例:

popup('Are you sure you want to delete this item?', {
    "Yes": function () {
        dItem(type, id, element, confirmed);
    },

    "Cancel": function () {
        popupClose();
    }
});

作为一种解决方法,您可以简单地为元素生成唯一ID,并在稍后使用它来标识元素。因为您的函数是递归的,所以您需要处理element可以是ELEMENT_NODEstring的事实。

for(var i in b){
    var generatedId = i /* TODO: not sure this generates an unique id */;
    _b += "<div id='" + generatedId + "' onclick='" + b[i] + "'>" + i + "</div>";
}

function dItem (type, id, element, confirmed) {
    if (confirmed) {
        // handle delete function
    }else{
        var elementId;

        // find the elementId
        if (element && element.nodeType && element.nodeType == 1) {
            elementId = element.id;
        }else if (typeof element == 'string') {
            elementId = element
        }else{
            throw Error('Argument [element] is not a ELEMENT_NODE or string');
        }

        var args = [type, id, elementId, true];

        popup('Are you sure you want to delete this item?', {
            "Yes": "dItem(" + args.join(', ') + ")",
            "Cancel": "popupClose()"
        });
    }
}