【问题标题】:Highlight the sub text depending on the number of characters根据字符数突出显示子文本
【发布时间】:2012-10-18 15:26:29
【问题描述】:

基本思路是高亮输入中指定长度值后的字符,同时显示提示信息。

我们开始吧:

<div id="test_box">
   <input type="text" id="text_text">
</div>

css:

 #notice {
    width: 140px;
    height: 40px;
    background-color: black;   

    }
 #test_box {
       width: 400px;
       height: 400px;

 }

和 jQuery 代码:

$(document).ready(function() {
        var length = $('#text_text').val().length; 
        var char_limit = 5;       
        $('#text_text').bind('keyup', function() {
            new_length = $('#text_text').val().length;
            if (new_length > char_limit) {
              $('#text_text').css('color','red');
                $('#test_box').append('<div id="notice"> There are limit of character for home page title of this field </div>'); // wrong too much divs :/

            } else {
               $('#text_text').css('color', 'black');
               $('#notice').hide(); //wrong             
            }
        });
 });

目前在char_limit 之后突出显示的字符被超过,我需要的是只突出那些在char_limit 之后的字符。并且还注意到如果我每次输入字符都会添加块,我认为我应该手动创建该 div 或者可能不创建,并在超过 char_limit 时以某种方式显示它。

【问题讨论】:

  • 你可以只使用文本框的mexlength 属性吗? &lt;input type="text" maxlength="5" value="" id="text_text" /&gt; 这将在不需要脚本的情况下强制解决问题。
  • 我不能那样做,因为我的网站用户可以添加一些内容并且每个内容都有标题,但是在主页上我需要显示修剪过的标题并且限制是 5 atm,但这只是示例(限制将在稍后设置),所以我想让用户了解如果他们在主页上宣传这个标题将被修剪。
  • 如果你不介意使用jquery插件:jQuery Caret Plugin,可以highlight text by specifying starting position, ending position or length of selection in a "text input box" (input type="text") or "text area" (textarea)

标签: javascript jquery


【解决方案1】:

突出显示文本的某些部分并非不可能,因为您可以通过选择突出显示它。

看看这个:http://jsfiddle.net/9BrpD/3/

$(document).ready(function(){
    var input = $('#text_text');
    var warning = $('#warning');
    input.on('keyup', function(){
       var val = $(this).val();
        if ( val.length > 3 ) {
            warning.html('hello').css('display', 'block');
            l = val.length
            var input = document.getElementById("text_text");
            input.setSelectionRange(l-3, l);
            input.focus();
        }
        else {
             warning.css('display', 'none');
        }
    });   

});​

它还解决了您重复 div 的问题。但是,我觉得这个解决方案对用户不是很友好。您可以尝试将焦点移到输入字段之外,但仍然不能完全令人满意。

【讨论】:

  • 关于用户友好你是对的,你的解决方案很有趣。谢谢回答
【解决方案2】:

我不确定您所说的“突出显示”超过 char_limit 的字符是什么意思。如果您想将样式应用于输入文本的一部分,那么这是不可能的:样式将应用于整个输入。您可以尝试使用 span 和一些 javascript 来模拟输入字段来监听键盘事件。这在this answer to a similar question as yours 中有解释。

对于通知,确实,您不应该每次都添加它。它应该在您的 HTML 中,带有 css“display:none”,并在适当的时候显示和隐藏。

<div id="test_box">
    <input type="text" id="text_text">
    <div id="notice"> There are limit of character for home page title of this field </div>
</div>

--

#notice {
    width: 140px;
    height: 40px;
    background-color: black;   
    display:none;
}

--

$(document).ready(function() {
    var length = $('#text_text').val().length; 
    var char_limit = 5;       
    $('#text_text').bind('keyup', function() {
        new_length = $('#text_text').val().length;
        if (new_length > char_limit) {
          $('#text_text').css('color','red');
            $('#notice').show();

        } else {
           $('#text_text').css('color', 'black');
           $('#notice').hide();          
        }
    });

});

Here is a JSFiddle 使用该代码。

【讨论】:

  • 是的,我想将样式应用于输入的一部分,不知道这是不可能的 js,关于通知感谢您的回答!将尝试模拟该领域。谢谢
猜你喜欢
  • 2019-08-13
  • 1970-01-01
  • 1970-01-01
  • 2021-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多