在javascript中以字符串形式编写函数

在javascript中以字符串形式编写函数,javascript,jquery,Javascript,Jquery,我想创建一个上下文驱动的菜单。当用户单击树中的任何节点时,就会出现此菜单。每个节点都有一个类“treedropdownmenu”。单击节点时,上下文驱动菜单应打开。我正在传递一个带有删除菜单选项的方法“\u deleteClick”。但它给了我一个错误:“\u deleteClick”菜单未找到 我的小部件中有以下代码: $(".treedropdownmenu").live("click", function (event) { var pos; if(($(window).h

我想创建一个上下文驱动的菜单。当用户单击树中的任何节点时,就会出现此菜单。每个节点都有一个类“treedropdownmenu”。单击节点时,上下文驱动菜单应打开。我正在传递一个带有删除菜单选项的方法“\u deleteClick”。但它给了我一个错误:“\u deleteClick”菜单未找到

我的小部件中有以下代码:

$(".treedropdownmenu").live("click", function (event) {
    var pos;
    if(($(window).height() - event.pageY) < 80) {
        pos = {
            left: event.pageX + 20,
            top: event.pageY - 60
        };
    } else {
        pos = {
            left: event.pageX + 20,
            top: event.pageY + 20
        };
    }
    if(ko.dataFor(this).nodeId() && ko.dataFor(this).nodeId() !== 0) {
        var item = ko.dataFor(this);
        var strHtml = "<a href='#' onclick='_deleteClick(item)'>Delete:</a> " + "<br/>" + "<b>Create Date:</b>" + "<br/>" + "<b>Exposed Party Name:</b>" + "<br/>" + "<b>Portfolio Type:</b>" + "<br/>" + "<b>Owner:</b>";
        $("#dataManagerMenuItem1234").show().offset(pos).html(strHtml);
    }
});

有人能告诉我哪里出了问题吗?

是的,我认为这行不通。试试这个:

var strHtml = "<a href='#'>Delete:</a> " + "<br/>" + "<b>Create Date:</b>" + "<br/>" + "<b>Exposed Party Name:</b>" + "<br/>" + "<b>Portfolio Type:</b>" + "<br/>" + "<b>Owner:</b>";
 $("#dataManagerMenuItem1234").show().offset(pos).html(strHtml).find('a').click(function() { _deleteClick(item); });
var strHtml=”“+”
“+”创建日期:“+”
“+”公开方名称:“+”
“+”投资组合类型:“+”
“+”所有者:”; $(“#DataManagerNuItem1234”).show().offset(pos).html(strHtml).find('a')。单击(function(){u deleteClick(item);});
不要在字符串中添加事件处理程序,这是一种糟糕的做法

var strHtml = "<a href='#'>foo</a>;
var lnk = jQuery(strHtml);
lnk.on("click", function(){ _deleteClick(item); });
$("#dataManagerMenuItem1234").show().offset(pos).append(lnk);
var strHtml=“;
var lnk=jQuery(strHtml);
lnk.on(“click”,function(){u deleteClick(item);});
$(“#DataManagerNuItem1234”).show().offset(pos).append(lnk);

这是一种向链接添加事件处理程序的笨拙方法,尤其是 既然您是以编程方式创建的,为什么不添加 像这样吗

var item = ko.dataFor(this);
var deleteLink = $('<a>', {
    href: '#',
    click: function() {
        _deleteClick(item);
    },
    text: 'Delete:'
});
$("#...").show().offset(pos).append(deleteLink);
var item=ko.dataFor(本);
变量deleteLink=$(''{
href:“#”,
单击:函数(){
_删除单击(项目);
},
文本:“删除:”
});
$(“#…”).show().offset(pos.append(deleteLink);

您尚未在此处发布所有代码,但我假设您已在本地范围中定义了函数
\u deleteClick
,并且您的onclick处理程序无法从全局范围访问它。这就是为什么不应使用
onclick
属性将事件附加到DOM元素的原因之一!您的onclick属性ut作为字符串,不会在正确的上下文中执行。请改用jQuery订阅

看起来您使用的是KnockoutJS。更好的方法是使用a写出菜单

var item = ko.dataFor(this);
var deleteLink = $('<a>', {
    href: '#',
    click: function() {
        _deleteClick(item);
    },
    text: 'Delete:'
});
$("#...").show().offset(pos).append(deleteLink);