我正在制作一个JQuery插件,需要知道调用插件的上下文事件,所以我可以做e.preventDefault();从里面。
该插件位于:https://github.com/brenosilver/JQuery.PopupBox
目前我有这个:
$("#el").click(function(event){
$("#targetEl").popupBox(event);
});
但是我不希望事件被传递,因为我试图尽可能地使用它。
在插件中我有这个:
$.fn.popupBox = function(event, options){
event.preventDefault();
event.stopPropagation();
}
我成功使用:
var contextObject = window.getSelection().getRangeAt(0).startContainer.parentNode;
var event = $._data( $(contextObject)[0], "events" );
但这并不会返回本机事件类型对象。所以我不能使用event.preventDefault();
进一步解释:
我需要有event.stopPropagation,因为如果没有,插件处理的元素只会在屏幕上显示,然后立即隐藏。
谢谢。
答案 0 :(得分:0)
根据评论和插件使用示例,我觉得插件的设计应该有点不同。
插件不应该关注外部世界的事件,当然它不应该混淆事件以及在它之外发生的任何事情。毕竟这是插件的目的 - 插入并运行。
我建议将策略更改为在插件的内的点击目标上绑定点击事件的策略。
然后配置可能如下所示:
$("#targetEl").popupBox({
clickOn: '#el'
});
或其他方式:
$("#el").popupBox({
target: "#targetEl"
});
在这两种情况下,您都可以自己在插件中绑定click事件,并且无论您需要什么,都可以使用事件。