当调用 jQuery 的 .trigger() 函数传播到绑定到元素的其他处理程序时停止

When calling jQuery's .trigger() function propagation to other handlers bound to the element stops

在元素上使用 .trigger() 事件时,绑定到此事件的其他事件不会触发。当我评论这一行时,一切顺利。我正在使用 django-autocomplete-light 库,所以我简化了这个例子。

<input type="text" class="js-input">
<div class="js-box">
    <!-- code inside the box is loaded dynamically -->
    <a href="#" class="js-autocomplete-item"></a>
</div>

不工作

selectChoice 事件被触发并且。

var boxClickHandler = function(e) {
    var current = this.box.find('.' + this.hilightClass);

    $(".js-input").trigger('selectChoice', [current, this]);
};

$(".js-box").on("mouseclick", ".js-autocomplete-item", $.proxy(boxClickHandler, this));

// somewhere else in the code
$(".js-input").bind('selectChoice', function(e, choice, autocomplete) {
    // empty handler
});

// somewhere else in the code
$(document).on("click", ".js-autocomplete-item", function(e){
    // FIXME: this code is not running
});

工作

var boxClickHandler = function(e) {
    var current = this.box.find('.' + this.hilightClass);

    // $(".js-input").trigger('selectChoice', [current, this]);
};

$(".js-box").on("mouseclick", ".js-autocomplete-item", $.proxy(boxClickHandler, this));

// somewhere else in the code
$(".js-input").bind('selectChoice', function(e, choice, autocomplete) {
    // empty handler
});

// somewhere else in the code
$(document).on("click", ".js-autocomplete-item", function(e){
    // when selectChoice event is not triggered from boxClickHandler this code is running
});

我有点困惑。我尝试了很多方法,我相信这很简单,因为这段代码 运行 不久前(在我升级 django-autocomplete-light lib 之前,它使用了这段代码和许多其他代码,以便 运行 Django 1.8)。但似乎只是与jQuery有关。有人遇到过类似的问题吗?

您是否尝试打开 "developer tools" 或您的浏览器的等效项以查看此语句是否触发了任何错误:

$(".js-input").trigger('selectChoice', [current, this]);

没有 try/catch - 任何 error/exception 都会停止所有后续 javascript.

的执行

也许尝试记录这个对象 and/or 它的属性:

var inputElement = $(".js-input");