2010-02-17 21 views
6

Uso del script desactivado http://viralpatel.net/blogs/2008/12/set-maxlength-of-textarea-input-using-jquery-javascript.html Estoy intentando limitar la entrada de un área de texto a 1000 caracteres. El prototipo también está incluido en la página.Maxlength en textarea usando jQuery

Funciona bien en cromo, pero en firefox se da el siguiente error y la entrada no se limita:

$("textarea[maxlength]") is null 

estoy completamente perplejo. Cualquier ayuda sería apreciada. Los fragmentos de código siguen.

la caja de texto:

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

El 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

exacta misma pregunta: - [preguntado por mí;)] Por favor, mira esto. http://stackoverflow.com/questions/1125482/how-to-impose-maxlength-on-textarea-in-html-javascript –

+0

Esto realmente no es la misma pregunta en absoluto. Él ya tiene una solución, solo está teniendo problemas para hacer funcionar la parte jQuery. –

+0

no _exactly_ la misma pregunta. OP pregunta específicamente sobre jquery: D – Jared

Respuesta

6

envolver su archivo jquery.maxlength.js en esto:

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

Cuando llama al $().maxlength() está tratando de usar la variable $, pero en un ámbito diferente y ya no es igual a jQuery. Al envolver el plugin en una efectiva automáticamente función anónima, se crea un ámbito privado, donde $ = jQuery

+0

+1 para ir al paso adicional y explicar el anon func y var scoping. – Jared

+0

Ah, ya veo. No entiendo completamente la sintaxis de la función anónima, ¿cómo se pasa el objeto jQuery como '$'? (function ($) {...}) (jQuery) – Cam

+0

@Cam, es solo la sintaxis de cómo funciona JS. Por ejemplo '(función (a, b, c) {alerta (a + b + c);}) (1,2,3)' alertaría a '6' ya que toma los tres elementos separados por comas en los últimos parens, y lo pasará como los parámetros a la función. Espero que esto ayude un poco. –

3

Desde jQuery se establece en noConflict() mode necesita cambiar jquery.maxlength.js a

(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

One +1 se merece otra. Este es el problema. Me pregunto por qué funcionó en Chrome sin embargo. Me pregunto si Chrome tiene una definición diferente de alcance. –