2010-02-17 13 views
6

Utilizzo dello script disattivato http://viralpatel.net/blogs/2008/12/set-maxlength-of-textarea-input-using-jquery-javascript.html Sto cercando di limitare l'input di una textarea a 1000 caratteri. Prototipo è anche incluso nella pagina.Lunghezza massima nell'area di testo con jQuery

Funziona bene in cromo, ma in Firefox è dato il seguente errore e l'ingresso non è limitata:

$("textarea[maxlength]") is null 

io sono completamente confusi. Qualsiasi aiuto sarebbe apprezzato. Seguono i frammenti di codice.

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

esatta stessa domanda: - [chiesto da me;)] Si prega di vedere questo. http://stackoverflow.com/questions/1125482/how-to-impose-maxlength-on-textarea-in-html-javascript –

+0

Questa non è affatto la stessa domanda. Ha già una soluzione, ha solo difficoltà a far funzionare la parte jQuery. –

+0

non esattamente _ la stessa domanda. OP sta chiedendo specificatamente a jquery: D – Jared

risposta

6

avvolgere il vostro file di jquery.maxlength.js in questo:

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

Quando si chiama $().maxlength() si sta tentando di utilizzare la variabile $, ma in un ambito diverso e non è più uguale a jQuery. Avvolgendo il plug-in self executing funzione anonima, si crea un ambito privato dove $ = jQuery

+0

+1 per andare al passaggio extra e spiegare la funzione anon e var scope. – Jared

+0

Ah, capisco. Non capisco appieno la sintassi della funzione anonima, come viene passato l'oggetto jQuery come '$'? (function ($) {...}) (jQuery) – Cam

+0

@Cam, è solo la sintassi di come funziona JS. Per esempio '(funzione (a, b, c) {alert (a + b + c);}) (1,2,3)' allerta '6' poiché prende i tre elementi separati da virgola nell'ultimo parens, e lo passerà come parametri alla funzione. Spero che aiuti un po '. –

3

Poiché jQuery è impostato su noConflict() mode è necessario modificare 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

Un +1 merita un altro. Questo è il problema. Mi chiedo perché ha funzionato in Chrome però. Mi chiedo se Chrome abbia una diversa definizione di ambito. –