每当选择器被触发时触发功能

时间:2015-02-26 14:43:23

标签: javascript jquery

现在我有一个滚动功能,我每次都在textArea滚动,我有很多行,我触发textArea所以我自动调用函数滚动。

当前代码;

var textArea = $('textArea');

if(a) {
 textArea.append(msg.a);
 scroll();
}
if(b) {
 textArea.append(msg.b);
 scroll();
}

所以我有很多scroll()

是否可以在te变量中进行调用,因此每次自动调用textArea都会执行滚动操作,因此我不需要将其放在每个函数中。

1 个答案:

答案 0 :(得分:0)

当然有可能,但可能不太明智。如果您必须将文本附加到文档中,该怎么办?在这种情况下,你想在整个页面上调用滚动吗?无论如何,扩展jQuery函数(如append())的功能非常容易。以下是使用现有方案的示例:

// modify jQuery functionality
(function($){
  
    // replacing old append
    var old = $.fn.append;
    $.fn.append = function()
    {
        var ret = old.apply(this, arguments);
      
        // lets keep some sanity here and check
        // if it's a textarea or not first
        if($(this).is('textarea')) {
            $(this).myScroll();
        }
        return ret;
    };
  
    // new scroll function
    $.fn.extend({
        myScroll: function() {
            return this.each(function() {
                $(this).scrollTop(this.scrollHeight);
            });
        }
    });
})(jQuery);

// meat and potatos
var textArea = $('textArea');
for(var i = 0; i < 20; i++) {
    setTimeout(function(){
        textArea.append('Some genereic text for testing purposes');   
    }, 500 * i);
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<textarea style="width: 200px; height: 100px; overflow-y: scroll;"></textarea>

它的基本功能是将旧函数保存在变量(old)中,调用它,添加逻辑并返回结果。我还添加了一个jQuery myScroll()函数来标准化它。