如何从外部触发的自定义插件中获取事件而不将其作为参数传递?

时间:2014-12-25 22:32:17

标签: javascript jquery events javascript-events

我正在制作一个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,因为如果没有,插件处理的元素只会在屏幕上显示,然后立即隐藏。

谢谢。

1 个答案:

答案 0 :(得分:0)

根据评论和插件使用示例,我觉得插件的设计应该有点不同。

插件不应该关注外部世界的事件,当然它不应该混淆事件以及在它之外发生的任何事情。毕竟这是插件的目的 - 插入并运行。

我建议将策略更改为在插件的内的点击目标上绑定点击事件的策略。

然后配置可能如下所示:

$("#targetEl").popupBox({
    clickOn: '#el'
});

或其他方式:

$("#el").popupBox({
    target: "#targetEl"
});

在这两种情况下,您都可以自己在插件中绑定click事件,并且无论您需要什么,都可以使用事件。