Функция связывания jQuery на фокусе - PullRequest
1 голос
/ 04 октября 2009

Я пишу небольшой плагин для jQuery, и до сих пор у меня есть это:

(function($){

    $.fn.extend({

        someFunction: function() {
            return this.each(function() {
                var obj = $(this);
                obj.focus(someInternalFunction(obj));
            });
        }

    });

    function someInternalFunction(obj) {
    };

})(jQuery);

Проблема в том, что, когда я присоединяю someFunction к объекту, объект получает фокус, и привязка someInternalFunction к событию focus не выполняется.

Затем я попытался связать функцию, чтобы обернуть вызов функции в другую функцию:

obj.focus(function() {
    someInternalFunction($(this));
});

Этот код работает, но он совсем не хорош. Можно ли привязать функцию к фокусу, не добавляя ее в другую функцию?

Ответы [ 2 ]

1 голос
/ 05 октября 2009

Здесь:

obj.focus(someInternalFunction(obj));
                              ^^^^^ 

... вы вызываете функцию, а это означает, что ее возвращаемое значение - это то, что фактически заканчивается передачей focus(). Вместо этого вы хотите передать функцию в focus(). Учитывая тот факт, что вы хотите передать obj в someInternalFunction, вам придется определить дополнительную функцию, чтобы обернуть все это:

obj.focus(function(){
    someInternalFunction(obj);
});

Просто чтобы прояснить ситуацию:

var x = function() { return 3; }; // Defining a function

x; // -> this is a function reference
x(); // -> this is 3
1 голос
/ 04 октября 2009
$.fn.bindFocus() = function(){
    var internalFunction = function(){
        var $this = $(this),
            self = this;
        // try do stuff here
    };
    return this.each(function(){
        $(this).bind('focus', internalFunction);
    });
}

$('#myElement').bindFocus();

Надеюсь, это поможет?

EDT. Извините, впервые ошибаюсь:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...