2010-05-10 45 views
5

Đây là nỗ lực của tôi tại hạn chế số ký tự nhập vào một vùng văn bản:Làm thế nào để hạn chế số ký tự nhập vào một vùng văn bản

var limit = 255; 
var txt = $('textarea[id$=txtPurpose]'); 

$(txt).keyup(function() { 
    var len = $(this).val().length; 
    if (len > limit) { 
     //this.value = this.value.substring(0, 50); 
     $(this).addClass('goRed'); 
     $('#spn').text(len - limit + " characters exceeded"); 
     return false; 
    } else { 
     $(this).removeClass('goRed'); 
     $('#spn').text(limit - len + " characters left"); 
    } 
}); 

Tuy nhiên, nó không hoạt động rất tốt. Làm cách nào để ngăn người dùng nhập văn bản sau khi đạt đến giới hạn nhất định, hãy nói 255 ký tự?

Trả lời

9

Dưới đây là những gì tôi sử dụng để giới hạn thứ gì đó đến 1200 ký tự. Khi ai đó nhập quá nhiều ký tự, tôi chỉ cắt ngắn nội dung của vùng văn bản đó.

$(function() { 
    //set up text length counter 
    $('#id_limited_textarea').keyup(function() { 
     update_chars_left(1200, $('#id_limited_textarea')[0], $('#text_chars_left')); 
    }); 
    //and fire it on doc ready, too 
    update_chars_left(1200, $('#id_limited_textarea')[0], $('#text_chars_left')); 

}); 

function update_chars_left(max_len, target_input, display_element) { 
    var text_len = target_input.value.length; 
    if (text_len >= max_len) { 
     target_input.value = target_input.value.substring(0, max_len); // truncate 
     display_element.html("0"); 
    } else { 
     display_element.html(max_len - text_len); 
    } 
} 
+0

Bạn đã sao chép và dán cuộc gọi update_chars_left(), mặc dù các thông số giống nhau. – mikemaccana

+0

Điều này có thể được đơn giản hóa nhiều hơn, xem câu trả lời của tôi bên dưới. –

5
$(this).val($(this).val().substring(0, limit)); 
+0

không cắt xén các ký tự. –

+0

@Abu: Rất tiếc, hãy thử điều này –

+1

Mã này có được đặt đúng nhất trong sự kiện keyup không? –

1

Plugin của tôi:

(function($) { 

    $.fn.textCounter = function(options) { 

     var defaults = { 
      maxlimit: 100,  // max limit character 
      description: null, // element for descript count character 
      enter: true   // if accept enter 
     }; 

     var options = $.extend({}, defaults, options); 

     if (options.description != null) { 
      if (typeof options.description == 'string') 
       options.description = $('#' + options.description); 
     } 

     var fevent = function(ev) { 

      var value = $(this).val(), 
       k = ev.charCode || ev.keyCode || ev.which, 
       incremente = 1; 

      if (k == 8) 
       incremente = -1; 

      if (options.enter == false && k == 13) 
       return false; 

      if (ev.ctrlKey || ev.altKey || ev.metaKey) //Ignore 
       return true; 

      if ((value.length + incremente) > options.maxlimit) 
       return false; 

      return true; 
     }; 

     var fcounter = function(ev) { 
      var value = $(this).val(); 
      $(options.description).text(options.maxlimit - value.length); 
     }; 

     $(this).each(function(i, el) { 
      if ($(this).is(':input')) { 
       $(this).unbind('keypress.textCounter').bind('keypress.textCounter', fevent); 
       $(this).unbind('keyup.textCounter').bind('keyup.textCounter', fcounter); 
      } 
     }); 

    }; 

})(jQuery); 
0
var limit="NO of characters";<br><br> 
$(this).val($(this).val().substring(0, limit)); 
9

Mặc dù câu hỏi này là khá cũ. Nếu tôi là bạn, tôi làm điều gì đó rất đơn giản như

<textarea maxlength="255"></textarea> 

Điều này sẽ giới hạn người dùng chỉ nhập 255 ký tự trong vùng văn bản.

+1

nhờ bạn đời ... tôi quên mất điều đó :) - giải pháp 0,0001kb (+1) –

+0

hỗ trợ cho 'maxlength' là gì? –

3

Để đơn giản hóa này đến tận xương trần cơ bản:

<textarea name="message" onkeydown="return this.value.substr(0,160)"></textarea> 

Đặt tối đa của bạn đến nơi mà 160 là.

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