javascript文本字段计数器显示

标签 javascript jquery

我使用此处给出的答案 Count textarea characters但需要修改它以对文本字段输入中的字符进行倒计时,并在达到特定倒计时数字限制时更改颜色,以向用户提供某种形式的警告,他们正在接近字段限制。

到目前为止,这是我自己整理的。它确实有效! (惊人地)。首先,这是我的开头:

$(window).load(function() {
    $("#input_4_1").keyup(function() {
        $("#count_4_1").text("Characters remaining: " + (2550 - $(this).val().length));
    });
});

这就是我重新发明的:

$(window).load(function() {
    $("#input_4_1").keyup(function() {
        if (2550 - $(this).val().length >= 501) {
            $("#count_4_1").text("Characters remaining: " + (2550 - $(this).val().length));
        } else if ((2550 - $(this).val().length <= 500) && (2550 - $(this).val().length >= 101)) {
            $("#count_4_1").text("<span style=\"color: #55a500;\">Characters remaining: " + (2550 - $(this).val().length) + "</span>");
        } else if (2550 - $(this).val().length <= 100) {
            $("#count_4_1").text("<span style=\"color: #ff0000;\">Characters remaining: " + (2550 - $(this).val().length) + "</span>");
        }
    });
});

这就是惊人的效果。除了一个异常(exception)——问题来了。我对 JS 几乎一无所知。当读出的字符数在 2550 到 500 之间时显示正常。当字符读数变为 500 到 100 时,读数显示:

<span style="color: #55a500;">Characters remaining: 499</span>

那么如何让 JS 真正将 css 踢出正确的显示效果,而不是简单地在页面上回显?

如果相关,则说明正在使用 jQuery。

最佳答案

或者,只是为了好玩:您可能喜欢这种更通用的 css/data-attributes 而不是 jquery 方法:

[].slice.call(
  document.querySelectorAll('div[data-isRestrictedTextArea]')
).forEach(
  function(el) {
    var txtarea = el.querySelector('textarea')
       ,cntr = el.querySelector('div[data-iscounter]');
    
    cntr.setAttribute('data-maxlen', el.getAttribute('data-maxlen'));
    txtarea.onkeyup = count;
  }  
);

function count(e) {
  var len  = this.value.length,
      cntr = this.parentNode.querySelector('div[data-iscounter]'),
      maxl = this.parentNode.getAttribute('data-maxlen'),
      warn = maxl-Math.floor(0.2*maxl), // 80%  
      stop = maxl-Math.floor(0.1*maxl); // 90%

  cntr.setAttribute('data-ncharacters', len);
  cntr.className = len >= stop ? 'stop'
                   : len >= warn ? 'warn' 
                   : '';
  // truncate if len>=maxlen
  this.value = len >= maxl ? this.value.substr(0, maxl) : this.value;
  // set attribute for reporting
  cntr.setAttribute('data-ncharacters', len >= maxl ? maxl : len);
  return;
}
body {font: 12px/15px normal verdana,arial;}

div[data-isrestrictedTextarea] {
  display: inline-block;
  margin-top: 1em;
}

div[data-iscounter] {
  color: green;
  background-color: #eee;
}

div[data-iscounter]:before {
  content: 'you typed 'attr(data-ncharacters)' characters';
}

div[data-iscounter]:after {
    content: ' [max 'attr(data-maxlen)' characters]';
}

div[data-iscounter].warn {
  color: orange;
}

div[data-iscounter].stop {
  color: red;
}
<div data-isrestrictedTextarea="1" data-maxlen="15">
  <textarea placeholder="start typing" rows="2" cols="60"></textarea>
  <div id="cnt_cnttxt" data-iscounter="1" data-ncharacters="0"></div>
</div>

<div data-isrestrictedTextarea="1" data-maxlen="100">
  <textarea placeholder="start typing" rows="5" cols="60"></textarea>
  <div id="cnt_cnttxt" data-iscounter="1" data-ncharacters="0"></div>
</div>

关于javascript文本字段计数器显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28412000/

相关文章:

jquery - 如何使用 jquery 仅选择选择框的启用选项?

javascript - 如何获取选择控件中选中项的文本?

javascript - 在javascript html5音频预加载上取消了http请求

javascript - Datetimepicker 不使用给定的格式

javascript - 仅允许输入字段中的某些字符

jquery - Protractor 模拟 jQuery ajax

javascript - 如何使用 Bootstrap 验证?

javascript - 将变量作为 HREF

javascript - 等待 300ms,然后使用 jQuery 向下滑动菜单

javascript - jquery地理定位和 map 高亮