Javascript 如何从外部触发的自定义插件内部获取事件,而不将其作为参数传递?
我正在制作一个JQuery插件,它需要知道调用该插件的上下文事件,这样我就可以执行e.preventDefault();从里面 插件在这里: 目前我有: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
$("#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插件。