【问题标题】:Adding Counter to HTML Form and Calculate Credits向 HTML 表单添加计数器并计算积分
【发布时间】:2011-03-15 07:25:44
【问题描述】:

我有一个简单的 HTML 表单,允许用户输入一些文本,然后通过 SMS 网关将这些文本作为 SMS/TXT 消息发送。用户将消息文本输入文本区域:

<textarea rows="10" cols="40" id="smsbody" validate = "required:true" name="MessageBody"></textarea>

他们可以输入任意数量的文本,但是由于每条短信限制为 160 个字符,我想显示一个字符计数器,显示输入的字符数,然后计算有多少短信信用将使用。积分的计算公式基于输入的积分总数:如果一条消息超过 160 个字符,它将被拆分为多个消息部分。每个消息部分的长度限制为 153 个字符(标头为 7 个字节)。因此,一条 160 个字符的消息为 1 个积分,306 个字符为 2 个积分,459 个字符为 3 个积分,以此类推。

理想情况下,我希望它以这种格式显示:

0 个字符,1 条 SMS 消息 200 个字符,2 条 SMS 消息

我已经在使用 jQuery,很高兴也可以使用基于 jQuery 的解决方案。

非常感谢, 史蒂夫

【问题讨论】:

    标签: javascript jquery html character counter


    【解决方案1】:

    这样的?

    试试看: http://jsfiddle.net/kG8U2/2

    我认为我理解正确,对于 1 条消息,它可以是 160 个字符,但对于多条消息,消息的数量是字符数除以 153。

    HTML

    <textarea rows="10" cols="40" id="smsbody" validate = "required:true" name="MessageBody"></textarea>
    <div id='message'>
        <span id='char'>0</span> characters,
        <span id='msgs'>0</span> SMS message(s),
        <span id='remg'>160</span> remaining
    </div>​​​​
    

    jQuery

    var $chars = $('#char');
    var $msgs = $('#msgs');
    var $remg = $('#remg');
    
    $('#smsbody').keyup(function(evt) {
        var len = this.value.length;
        $chars.text(len);
        if(len <= 160) {
            $msgs.text(1);
            $remg.text(160 - len);
        } else {
            var multi = Math.ceil((len/153)) ;
            $msgs.text(multi);
            $remg.text((multi * 153) - len);
        }
    });​
    

    编辑:修复了一个错误,它偏离了 1 个字符,并添加了一个 remaining 计数器以供娱乐。

    【讨论】:

    • 嗨,Patrick 非常感谢我对它进行了一些调整,但它正在发挥作用。非常感激。谢谢史蒂夫
    • 我现在一直在测试它,它运行良好。一次快速的问题:当您开始 SMS 消息计数为 0 时,如果您输入几个字符,它会增加到 1。当您删除文本以使该字段为空时,SMS 消息计数保持在 1。可以减少回如果再次出现零个字符,则为零?
    • @Steve - 当然。我将if() 中的第一行更改为$msgs.text((len &amp;&amp; 1) || 0);。在这里看到它:jsfiddle.net/kG8U2/3
    • 感谢帕特里克,这是一种享受。在一个稍微相关的主题上,您是否知道是否可以在 POST 中使用我的 HTML 表单元素的其余部分提交字符数和 SMS 消息?这是一个 PHP 页面,我正在使用 POST 值更新数据库,并且还想更新数据库中存储字符数和 SMS 消息的字段。我可以再次计算这些,但如果我可以将它们与我的表单一起作为 POST 的一部分传递,我想避免这种情况。非常感谢,史蒂夫
    • @Steve - 我想我会有一些隐藏的输入,您可以在提交时将数字复制到其中。类似$('#myForm').submit( function() { $('#char_hidden').val( $('#char').text(); ) });
    猜你喜欢
    • 2023-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多