2
我開發了一個簡單的jQuery插件,當我右鍵單擊div時工作正常,但是當我單擊第二個div時,上下文菜單出現在第一個div上。 Here's the jsfiddle。這個插件有什麼問題?jQuery插件:第二個div中的上下文菜單不工作
插件代碼:
(function ($) {
var menu = null;
$.fn.ctxMenu = function(options) {
var settings = $.extend({
menuItems: null,
onclick: null
}, options);
show(this,settings.menuItems,settings.onclick);
};
function show(obj,menuItems,onclick){
obj.bind("contextmenu", function(e) {
if (e.preventDefault) e.preventDefault();
if (e.stopPropagation) e.stopPropagation();
render(obj,e.offsetX, e.offsetY,menuItems,onclick);
});
obj.bind("click", function(e) {
if (menu != null)
menu.remove();
});
}
function render(obj,x,y,menuItems,onclick) {
if (menu != null)
menu.remove();
menu = $('<div id="menu" class="ctxMenu" />');
obj.append(menu);
menu.css('padding-top', '4px');
menu.css('padding-bottom', '0px');
menu.css('padding-left', '6px');
menu.css('padding-right', '20px');
menu.css('position', 'absolute');
menu.css('top', y+'px');
menu.css('left', x+'px');
for (var i=0;i<menuItems.length;i++) {
var item = $('<div id="item" style="height:20px;padding:2px;cursor:default;" />');
item.attr('opt',menuItems[i].opt);
var p = $('<p id="p' + i + '" style="margin:0" />');
p.text(menuItems[i].optCaption);
p.attr('opt',menuItems[i].opt);
item.append(p);
menu.append(item);
item.bind("click", function(e) {
if (typeof onclick == 'function')
onclick.call(this,obj.attr('id'),$(e.target).attr('opt'));
});
}
}
}(jQuery));
並品嚐如何調用它的代碼:
$div.ctxMenu({
menuItems: [ { opt:1, optCaption: "Option 1" },
{ opt:2, optCaption: "Option 2" },
{ opt:3, optCaption: "Option 3" }
],
change: function(id,opt) {
alert(id+"-"+opt);
}
});
因爲在父容器中沒有'position:relative':http://jsfiddle.net/pevans02/dzSRR/7/ –
在Firefox中對我很好,你有清除你的Web緩存嗎? –
@PatrickEvans我添加了位置:相對而且仍然有問題 – ps0604