[英]Write function as a string in javascript
我想创建一个上下文驱动的菜单。 当用户单击树中的任何节点时,会出现此菜单。 每个节点都有一个“treedropdownmenu”类。 在单击节点上,应打开上下文驱动的菜单。 我正在使用“删除”菜单选项传递方法“_deleteClick”。 但它给我一个错误:找不到“_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);
}
});
我的删除菜单是:
function _deleteClick(item) {
alert("delete clicked");
}
谁能让我知道我哪里错了?
是的,我认为这不会起作用。 尝试这个:
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 item = ko.dataFor(this);
var deleteLink = $('<a>', {
href: '#',
click: function() {
_deleteClick(item);
},
text: 'Delete:'
});
$("#...").show().offset(pos).append(deleteLink);
不要在字符串中添加事件处理程序,这是不好的做法。
var strHtml = "<a href='#'>foo</a>;
var lnk = jQuery(strHtml);
lnk.on("click", function(){ _deleteClick(item); });
$("#dataManagerMenuItem1234").show().offset(pos).append(lnk);
您尚未在此处发布所有代码,但我假设您已在本地范围内定义了函数_deleteClick
,并且您的onclick处理程序无法从全局范围访问它。 这是您不应该使用onclick
属性将事件附加到DOM元素的原因之一! 您的onclick属性(以字符串形式写出)不会在正确的上下文中执行。 使用jQuery来订阅。
看起来你正在使用KnockoutJS。 更好的方法是使用Knockout模板写出你的菜单。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.