【问题标题】:Character counter for form_for form not updating the count in real timeform_for 表单的字符计数器未实时更新计数
【发布时间】:2019-01-17 02:25:24
【问题描述】:

我实现了一个表单 text_field 字符计数器,它可以在 jsfiddle 中工作,但不能在应用程序中使用。它出现但不会像在 jsfiddle 中那样实时计数。当我重新加载页面时,它将计算 text_field 中的当前字符。

我在页面中确实有更多的 javascript,但我尝试通过删除所有其他 java 而不是 coutner 来测试它,但它仍然无法工作。

奇怪的是我有一个

minlength: 20, maxlength: 1000

未验证时,将显示一个切换计数,并将实时计数,直到达到最小长度。我的目标是将该计数器翻译到 text_field 下,以便它始终显示/计算字符

这是我的代码:

<%= form.label :description %>
<%= form.text_area :description, class: "form-control message", :rows => 10, minlength: 20, maxlength: 1000, required: true    %>
<span class="countdown"></span>

Jquery:

  jQuery(document).ready(function ($) {
    updateCountdownAll();
    $('.message').live('input', updateCountdown);

    });

    function updateCountdownAll() {
        $('.message').each(function () {
            updateCountdown(this);
        });
    }

    function updateCountdown(e) {

        var currentElement;
        if (e.target) {
            currentElement = e.target;
        } else {
            currentElement = e;
        }

        var maxLengh = $(currentElement).attr('maxlength');
        var remaining = $(currentElement).val().length;
        $(currentElement).nextAll('.countdown:first').text(remaining + '/' + maxLengh);
    }

JSFiddle: http://jsfiddle.net/4bozw3k5/

我可以对代码做些什么以使其在 rails 应用程序中工作?实时

【问题讨论】:

    标签: javascript jquery ruby-on-rails ruby


    【解决方案1】:

    首先,浏览器检查工具中是否有任何错误消息?你有没有安装 gem jquery-rails 如果没有,请访问下面的链接并安装它。

    https://rubygems.org/gems/jquery-rails/versions/4.3.1

    其次,这可能是因为 .live() 已被贬值,并且根据 1.9 版已完全删除。

    尝试改用事件处理程序.on()

    第三,代码量非常大,对于一些非常简单的东西来说几乎是意大利面条式的代码。我会做些什么来简化它:

        $(".message").on("keyup", function () {
            var maxlength = $(this).attr("maxlength")
            var remaining = $(this).val().length
            $(this).next().text(remaining + '/' + maxLengh)
        })
    

    无需将其包装在 $(document).ready() 中,太多的 $(document).ready() 会在刷新应用时减慢加载时间(通过增加脚本编写时间)。根据您设置 Rails 应用程序以执行 javascript 的方式,您可以将所有 javascript/jquery 包装在一个大的 $​​(document).ready() 中,而不是执行 一次 刷新应用程序时。

    此外,.on() 是一个事件侦听器,它正在侦听并等待某事发生,例如 .on("keyup", function()。您可以使用 $(".message").off() 关闭事件侦听器

    有点过度分享,但了解事件侦听器和事件委托对于编写好的 jQuery 至关重要。

    【讨论】:

    • 哇,你说得对。使用 .on 而不是 .live 解决了它。但是至于简化代码,以示例为例,我将如何查看倒计时呢?抱歉,如果这是显而易见的事情,但我显然没有在 javascript 或 jquery 方面受过太多培训
    • 我为你做了一个小提琴jsfiddle.net/2185mr9x——如果对你有帮助,别忘了把这个答案标记为正确!
    猜你喜欢
    • 1970-01-01
    • 2018-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多