use a closure to bind a function to this, Prototype function.bind doesn't work in jQuery, was causing an error when blurring a select in Safari

abstract-chosen
Adam Kittelson 2011-07-19 13:41:29 -07:00
parent 6247674d71
commit e8ac2bb71b
2 changed files with 14 additions and 4 deletions

View File

@ -151,14 +151,22 @@
return this.mouse_on_container = false;
};
Chosen.prototype.input_focus = function(evt) {
var binding;
binding = this;
if (!this.active_field) {
return setTimeout(this.container_click.bind(this), 50);
return setTimeout((function() {
return binding.container_click();
}), 50);
}
};
Chosen.prototype.input_blur = function(evt) {
var binding;
if (!this.mouse_on_container) {
this.active_field = false;
return setTimeout(this.blur_test.bind(this), 100);
binding = this;
return setTimeout((function() {
return binding.blur_test();
}), 100);
}
};
Chosen.prototype.blur_test = function(evt) {

View File

@ -129,12 +129,14 @@ class Chosen
mouse_leave: -> @mouse_on_container = false
input_focus: (evt) ->
setTimeout this.container_click.bind(this), 50 unless @active_field
binding = this
setTimeout (-> binding.container_click()), 50 unless @active_field
input_blur: (evt) ->
if not @mouse_on_container
@active_field = false
setTimeout this.blur_test.bind(this), 100
binding = this
setTimeout (-> binding.blur_test()), 100
blur_test: (evt) ->
this.close_field() if not @active_field and @container.hasClass "chzn-container-active"