【问题标题】:Maxlength in textarea using jQuery使用jQuery在textarea中的最大长度
【发布时间】:2011-01-17 17:22:42
【问题描述】:

使用关闭http://viralpatel.net/blogs/2008/12/set-maxlength-of-textarea-input-using-jquery-javascript.html 的脚本我试图将文本区域的输入限制为1000 个字符。原型也包含在页面中。

它在chrome中运行良好,但在firefox中出现以下错误并且输入不受限制:

$("textarea[maxlength]") is null

我完全被难住了。任何帮助,将不胜感激。代码 sn-ps 如下。

文本区域:

<%= 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();
            }
        }
    });
}

【问题讨论】:

  • 完全相同的问题:- [由我提出;)] 请看这个。 stackoverflow.com/questions/1125482/…
  • 这根本不是同一个问题。他已经有了解决方案,只是无法让 jQuery 部分正常工作。
  • 不是完全同一个问题。 OP专门询问jquery:D

标签: javascript jquery ruby-on-rails prototypejs


【解决方案1】:

将您的jquery.maxlength.js 文件包装在此:

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

当您调用$().maxlength() 时,它会尝试使用$ 变量,但在不同的范围内,它不再等于jQuery。通过将插件包装在一个自我执行的匿名函数中,它创建了一个私有作用域,其中$ = jQuery

【讨论】:

  • +1 用于执行额外步骤并解释 anon func 和 var 范围。
  • 啊,我明白了。我不完全理解匿名函数的语法,jQuery 对象是如何作为“$”传入的? (函数($){...})(jQuery)
  • @Cam,它只是 JS 工作方式的语法。例如(function(a,b,c){ alert(a + b + c); })(1,2,3) 会提醒6,因为它采用最后一个括号中的三个逗号分隔的项目,并将其作为参数传递给函数。希望对您有所帮助。
  • 为解释这一点干杯。我已经对您和@Jared 进行了详细的更改,但没有区别。该页面在 chrome 中仍然有效,在 firefox 3.5.8 中无效。还有其他想法吗?
【解决方案2】:

由于 jQuery 设置为 noConflict() mode,您需要将 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);

【讨论】:

  • 一个 +1 值得另一个。这就是问题。我想知道为什么它在 Chrome 中工作。我想知道 Chrome 是否对范围有不同的定义。
猜你喜欢
  • 2010-09-07
  • 1970-01-01
  • 2018-12-21
  • 2015-07-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-03
相关资源
最近更新 更多