Используя сценарий от http://viralpatel.net/blogs/2008/12/set-maxlength-of-textarea-input-using-jquery-javascript.html я пытаюсь ограничить вход текстовой области к 1 000 символов. Прототип также включен в страницу.
Это хорошо работает в хроме, но в Firefox дана следующая ошибка, и вход не ограничен:
$("textarea[maxlength]") is null
Я полностью озадачен. Любая справка ценилась бы. Фрагменты кода следуют.
Текстовая область:
<%= text_area 'project', 'description', 'cols' => 60, 'rows' => 8, 'maxlength' => 1000 %>
JavaScript:
<%= javascript_include_tag "jquery", "jquery.maxlength" -%>
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();
}
}
});
}
Заверните ваш файл jquery.maxlength.js
вот так:
(function($){
.. existing code goes here
})(jQuery);
Когда вы вызываете $().maxlength()
, он пытается использовать переменную $
, но в другой области видимости, и она больше не равна jQuery
. Обернув плагин в самоисполняющуюся анонимную функцию, он создает приватную область видимости, где $
= jQuery
Поскольку jQuery установлен в режим noConflict(), вам нужно изменить 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);