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

Javascript 如何从外部触发的自定义插件内部获取事件,而不将其作为参数传递?,javascript,jquery,events,javascript-events,Javascript,Jquery,Events,Javascript Events,我正在制作一个JQuery插件,它需要知道调用该插件的上下文事件,这样我就可以执行e.preventDefault();从里面 插件在这里: 目前我有: $("#el").click(function(event){ $("#targetEl").popupBox(event); }); $.fn.popupBox = function(event, options){ event.preventDefault(); ev

我正在制作一个JQuery插件,它需要知道调用该插件的上下文事件,这样我就可以执行e.preventDefault();从里面

插件在这里:

目前我有:

    $("#el").click(function(event){
        $("#targetEl").popupBox(event);
    });
    $.fn.popupBox = function(event, options){
        event.preventDefault();
        event.stopPropagation();
    }
但是我不想让这个活动被通过,因为我正试图让它尽可能的对用户友好

在插件中,我有以下内容:

    $("#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,因为如果没有,插件处理的元素只会显示在屏幕上,然后立即隐藏


谢谢。

根据评论和插件使用的示例,在我看来,插件的设计应该有所不同

插件不应该关注外部世界的事件,当然它也不应该干扰事件和外部发生的任何事情。毕竟这就是插件的目的——插入并操作

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

然后,配置可能如下所示:

$("#targetEl").popupBox({
    clickOn: '#el'
});
或者其他方式:

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

在这两种情况下,您都可以自己将click事件绑定到插件内部,并可以根据需要处理事件。

根据您的插件使用情况,它的工作不是
e.preventDefault
stopPropagation
。插件不应该关心这一点,但是插件的全部目的是在点击某个东西时在屏幕中间弹出一个元素。如果我没有event.stopPropagation(),元素将立即显示然后隐藏。起初我曾想过这样做,但后来我决定让用户在他想要的任何事件上调用插件。除此之外,传递事件似乎比传递{target:“#targetEl”}容易得多,但正如您所提到的,这可能不是一个好的设计决策。我根据您的建议重新设计了插件,但我使用了两个独立的参数,一个用于目标元素,另一个用于选项
.popubox($(“#targetEl”),{options}
。谢谢,这是我的第一个JQuery插件。