Maxlength в текстовой области с помощью jQuery

Используя сценарий от 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();
            }
        }
    });
}

6
задан Rob W 29 December 2011 в 17:13
поделиться

2 ответа

Заверните ваш файл jquery.maxlength.js вот так:

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

Когда вы вызываете $().maxlength(), он пытается использовать переменную $, но в другой области видимости, и она больше не равна jQuery. Обернув плагин в самоисполняющуюся анонимную функцию, он создает приватную область видимости, где $ = jQuery

6
ответ дан 10 December 2019 в 02:46
поделиться

Поскольку 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);
3
ответ дан 10 December 2019 в 02:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: