2010-02-17 35 views
6

关闭脚本http://viralpatel.net/blogs/2008/12/set-maxlength-of-textarea-input-using-jquery-javascript.html我想限制输入一个textarea到1000个字符。原型也包含在页面中。最大长度在textarea使用jQuery

它工作在铬罚款,但在Firefox中给出以下错误和输入不限于:

$("textarea[maxlength]") is null 

我完全难倒。任何帮助,将不胜感激。代码片段如下。

textarea的:

<%= text_area 'project', 'description', 'cols' => 60, 'rows' => 8, 'maxlength' => 1000 %> 

的JavaScript:

<%= javascript_include_tag "jquery", "jquery.maxlength" -%> 
<script type="text/javascript"> 
    jQuery.noConflict(); 
    jQuery(document).ready(function($) { 
    $().maxlength(); 
    }) 
</script> 

jquery.maxlength.js:

jQuery.fn.maxlength = function(){ 
    $('textarea[maxlength]').keypress(function(event){ 
     var key = event.which; 
     //all keys including return. 
     if(key >= 33 || key == 13) { 
      var maxLength = $(this).attr('maxlength'); 
      var length = this.value.length; 
      if(length >= maxLength) { 
       event.preventDefault(); 
      } 
     } 
    }); 
} 
+0

完全一样的问题noConflict() mode: - [由我问;)]请参阅此。 http://stackoverflow.com/questions/1125482/how-to-impose-maxlength-on-textarea-in-html-javascript – 2010-02-17 05:43:46

+0

这真的不是一回事。他已经有了一个解决方案,他只是无法让jQuery部分工作。 – 2010-02-17 05:45:49

+0

不是_完全相同的问题。 OP专门询问jquery:D – Jared 2010-02-17 05:46:01

回答

6

环绕你jquery.maxlength.js文件在此:

(function($){ 
    .. existing code goes here 
})(jQuery); 

当您致电$().maxlength()它试图使用$变量,但在不同的范围内,它不再等于jQuery。通过执行匿名函数包裹插件的自我,它创建了一个私人范围,其中$ = jQuery

+0

+1,用于进行额外的步骤并解释匿名函数和var范围。 – Jared 2010-02-17 05:47:03

+0

啊,我明白了。我不完全理解匿名函数的语法,jQuery对象如何作为'$'传入? (功能($){...})(jQuery) – Cam 2010-02-19 20:07:54

+0

@Cam,它只是JS如何工作的语法。例如'(函数(a,b,c){alert(a + b + c);})(1,2,3)'会提醒'6',因为它需要最后一个parens中的三个逗号分隔项,并将其作为参数传递给函数。希望有点帮助。 – 2010-02-20 01:23:47

3

由于jQuery是设置为你需要改变jquery.maxlength.js到

(function($) 
    $.fn.maxlength = function(){ 
     $('textarea[maxlength]').keypress(function(event){ 
      var key = event.which; 
      //all keys including return. 
      if(key >= 33 || key == 13) { 
       var maxLength = $(this).attr('maxlength'); 
       var length = this.value.length; 
       if(length >= maxLength) { 
        event.preventDefault(); 
       } 
      } 
     }); 
    }; 
})(jQuery); 
+0

一个+1值得拥有另一个+1。这就是问题。我想知道为什么它在Chrome中起作用。我想知道Chrome是否有不同的范围定义。 – 2010-02-17 05:49:02