jQuery:Chrome textareas和resize活动

时间:2010-01-19 19:09:36

标签: jquery events textarea google-chrome

Chrome默认情况下可以调整textareas的大小。如何将事件附加到textareas的调整大小事件?做天真的$('textarea').resize(function(){...})什么都不做。

6 个答案:

答案 0 :(得分:8)

看起来您不能专门附加事件来调整textarea的大小。调整窗口大小时会触发resize事件。

答案 1 :(得分:7)

我现在无法测试,但根据this forum entry,可以使用以下方法禁用它:

style="resize: none;"

与该条目不同,max-widthmax-height不会削减它 - 感谢@Jonathan Sampson的信息。

答案 2 :(得分:5)

这是一个使用CoffeeScript编写的jQuery插件。 Jonathan Sampson的想法。

$.fn.sizeId = ->                                                         
    return this.height() + "" + this.width()                             

$.fn.textAreaResized = (callback) ->                                     
    this.each ->                                                         
        that = $ this                                                    
        last = that.sizeId() 
        that.mousedown ->                                                
            last = that.sizeId()                                         
        that.mousemove ->                                                  
            callback(that.get(0)) if last isnt that.sizeId()             

您可以在CoffeeScript的主页上将其构建为Javascript

http://jashkenas.github.com/coffee-script/

使用“Try CoffeeScript”按钮。

答案 3 :(得分:5)

这是一个老问题,但是其他人在IRC中有同样的问题,所以我决定在此解决:http://jsfiddle.net/vol7ron/Z7HDn/

每个人都认为Chrome无法捕获调整大小事件且Chrome无法捕获mousedown,因此您需要设置init状态,然后通过mouseup处理更改:

jQuery(document).ready(function(){
   // set init (default) state   
   var $test = jQuery('#test');

   $test.data('w', $test.outerWidth());
   $test.data('h', $test.outerHeight()); 

   $test.mouseup(function(){
      var $this = jQuery(this);
      if (  $this.outerWidth()  != $this.data('w') 
         || $this.outerHeight() != $this.data('h')
         )
         alert( $this.outerWidth()  + ' - ' + $this.data('w') + '\n' 
              + $this.outerHeight() + ' - ' + $this.data('h'));

      // set new height/width
      $this.data('w', $this.outerWidth());
      $this.data('h', $this.outerHeight()); 
   });

});

HTML

<textarea id="test"></textarea>

答案 4 :(得分:3)

有jquery-resize,曾经包含只是使你的给定行工作: http://benalman.com/projects/jquery-resize-plugin/

答案 5 :(得分:0)

与Epeli的答案类似,我试图开始使用干净的解决方案来触发mousedown上的resize()事件:http://jsfiddle.net/cburgmer/jv5Yj/3/ 但它只适用于Firefox,因为Chrome似乎不会在调整大小处理程序上触发mousedown。但它会触发鼠标。