Создайте специальное мероприятие jQuery для измененного содержания

Я всегда думал, что большинство компиляторов в эти дни достаточно умно, чтобы сделать последнюю опцию. Принятие этого имеет место, я сказал бы, что первый действительно выглядит более хорошим также. Если цикл становится очень большим, нет никакой потребности посмотреть все вокруг для того, где o объявляется.

15
задан Sindre Sorhus 20 September 2009 в 18:28
поделиться

1 ответ

также взгляните на похожий сценарий Джеймса (объявляется как метод объекта jquery, а не как событие)

jQuery.fn.watch = function( id, fn ) {

    return this.each(function(){

        var self = this;

        var oldVal = self[id];
        $(self).data(
            'watch_timer',
            setInterval(function(){
                if (self[id] !== oldVal) {
                    fn.call(self, id, oldVal, self[id]);
                    oldVal = self[id];
                }
            }, 100)
        );

    });

    return self;
};

jQuery.fn.unwatch = function( id ) {

    return this.each(function(){
        clearInterval( $(this).data('watch_timer') );
    });

};

и создание специального события

jQuery.fn.valuechange = function(fn) {
    return this.bind('valuechange', fn);
};

jQuery.event.special.valuechange = {

    setup: function() {

        jQuery(this).watch('value', function(){
            jQuery.event.handle.call(this, {type:'valuechange'});
        });

    },

    teardown: function() {
        jQuery(this).unwatch('value');
    }

};

В любом случае, если оно вам нужно только как событие, ваш сценарий хорош :)

7
ответ дан 1 December 2019 в 04:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: