Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/443.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 通过回调停止自定义事件的传播_Javascript_Jquery - Fatal编程技术网

Javascript 通过回调停止自定义事件的传播

Javascript 通过回调停止自定义事件的传播,javascript,jquery,Javascript,Jquery,我不知道该怎么说,这就是我想要实现的: $(document).on('click', '.my-element', function(e) { var data = [{ 'event': e, 'self': this }]; // Trigger the override function first in case they need to stop prop $(document).trigger('override:s

我不知道该怎么说,这就是我想要实现的:

$(document).on('click', '.my-element', function(e) {
    var data = [{
        'event': e,
        'self': this
    }];

    // Trigger the override function first in case they need to stop prop
    $(document).trigger('override:something',dataa);

    // Would like to only trigger this default method if the event above is not set
    $(document).trigger('something',data);
});
然后在另一页上,我有一些东西要捕捉这个事件,比如:

$(document).on('override:something', function(e,data) {
    e.stopImmediatePropagation();
    data.e.stopImmediatePropagation(); // neither work
});
如果我可以停止所有后续事件,这将是最好的,但如果有办法检查是否设置了自定义事件,我也可以让它工作

我可以检查
override:something
是否存在,如果存在,则不要在之后执行默认的
something
事件

我尝试过像这样设置删除特定回调,但它的性能并没有达到预期,并且可能很难管理

var mycb = function() {
    alert('hi');
}
$(document).on('something', mycb);
// now to remove it
$(document).off('something', mycb); // does not remove the event 

非常感谢您的帮助。

谢谢大家的帮助,但目前看来,这个解决方案似乎是我发现唯一有效的方法。不过,仍然接受其他答案

    var override = jQuery._data($(document)[0], 'events')['override:something'];

    $(document).trigger('override:something', data);

    if ( typeof override == typeof undefined )
        $(document).trigger('dashboard:friend', data);

您是否真的在触发事件中传递了数据数组?一个建议是研究使用localStorage或sessionStorage来存储某种页面状态数据。一个演示将对此有所帮助,但不完全清楚发生了什么。很抱歉,我只是在键入数据时忘记了包含
数据。我已经更新了问题。我有一个元素,当它被单击时通常需要一个函数,但在某些时候它需要应用其他函数,并且阻止使用原始函数。我不确定jQuery中的执行顺序。您是否可以通过一些日志来验证
override:something
的事件处理程序是否在原始事件处理程序退出之前实际触发?还可以尝试添加
e.stopPropagation()
,甚至可能添加
e.preventDefault()
,以获得更好的度量。