当调用 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");
在元素上使用 .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");