2010-02-17 41 views
6

Sử dụng tập lệnh tắt http://viralpatel.net/blogs/2008/12/set-maxlength-of-textarea-input-using-jquery-javascript.html Tôi đang cố giới hạn đầu vào của vùng văn bản thành 1000 ký tự. Prototype cũng được bao gồm trong trang.Độ dài tối đa trong văn bản sử dụng jQuery

Nó hoạt động tốt trong chrome, nhưng trong firefox lỗi sau được đưa ra và đầu vào không giới hạn:

$("textarea[maxlength]") is null 

Tôi hoàn toàn bối rối. Bất kỳ trợ giúp sẽ được đánh giá cao. Đoạn mã theo sau.

Các textarea:

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

Các 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

cùng một câu hỏi chính xác: - [hỏi bởi tôi;)] Xin vui lòng xem này. http://stackoverflow.com/questions/1125482/how-to-impose-maxlength-on-textarea-in-html-javascript –

+0

Điều này thực sự không phải là cùng một câu hỏi. Ông đã có một giải pháp, ông chỉ là có vấn đề nhận được một phần jQuery để làm việc. –

+0

không phải _exactly_ cùng một câu hỏi. OP là đặc biệt yêu cầu về jquery: D – Jared

Trả lời

6

Quấn tập tin jquery.maxlength.js của bạn trong này:

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

Khi bạn gọi $().maxlength(), nó đang cố gắng sử dụng biến số $, nhưng trong phạm vi khác và không còn bằng jQuery. Bằng cách gói plugin trong một tự thực hiện chức năng ẩn danh, nó tạo ra một phạm vi riêng nơi $ = jQuery

+0

+1 cho đi bước thêm và giải thích anon func và var phạm vi. – Jared

+0

Ah, tôi hiểu rồi. Tôi không hoàn toàn hiểu cú pháp của hàm ẩn danh, đối tượng jQuery được chuyển thành '$' như thế nào? (hàm ($) {...}) (jQuery) – Cam

+0

@Cam, nó chỉ là cú pháp của cách JS hoạt động. Ví dụ '(chức năng (a, b, c) {cảnh báo (a + b + c);}) (1,2,3)' sẽ cảnh báo '6' vì nó lấy ba dấu phẩy cách nhau trong dấu ngoặc kép cuối cùng, và sẽ chuyển nó thành các tham số cho hàm. Hi vọng nó giúp được chút ít. –

3

Kể từ jQuery được thiết lập để noConflict() mode bạn cần thay đổi 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

Một +1 xứng đáng khác. Đây là vấn đề. Tôi tự hỏi tại sao nó hoạt động trong Chrome. Tôi tự hỏi liệu Chrome có định nghĩa khác về phạm vi hay không. –

Các vấn đề liên quan