jQuery实现当文字过多时,完成输入后(失去焦点),显示输入的前面的文字,隐藏后面的文字

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jQuery实现当文字过多时,完成输入后(失去焦点),显示输入的前面的文字,隐藏后面的文字相关的知识,希望对你有一定的参考价值。

与百度搜索条一样。
当输入的文字过多时:

当搜索条失去焦点时:
即显示最先输入的部分,
当搜索条再次获得焦点时:
光标位于最后输入的地方并且选中这些文字。

这样的功能怎么实现?

参考技术A 首先,select选中的时候,默认是光标从头开始,所以你的第三点是矛盾的,要么光标在最后,
要么选中(光标在前)。

下面附带测试代码:

<!DOCTYPE html>
<html>
<head>
    <title>AAA</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <meta http-equiv="Content-Language" content="zh-CN" />
</head>
<body>
<script type="text/javascript" src="http://www.zjmainstay.cn/jquery/jquery-1.8.2.min.js"></script>
<input type="text" size="10" id="test" value="01234567890123456789" />
<script type="text/javascript">
$.fn.setCursorPosition = function(position)
    if(this.lengh == 0) return this;
    return $(this).setSelection(position, position);


$.fn.setSelection = function(selectionStart, selectionEnd) 
    if(this.lengh == 0) return this;
    input = this[0];

    if (input.createTextRange) 
        var range = input.createTextRange();
        range.collapse(true);
        range.moveEnd('character', selectionEnd);
        range.moveStart('character', selectionStart);
        range.select();
     else if (input.setSelectionRange) 
        input.focus();
        input.setSelectionRange(selectionStart, selectionEnd);
    

    return this;


$.fn.focusEnd = function()
    this.setCursorPosition(this.val().length);
    return this;

$(document).ready(function()
    $("#test").blur( function() 
        $(this).setSelection(0,0);
     );
    
    $("#test").focus( function() 
        $(this).focusEnd();
        //$(this).select();
     );
);
</script>
</body>
</html>

追问

你的这个代码,我测试了一下,发现点击输入框输入文字后,不能点击其他东西了,焦点一直在输入框那里

追答

什么叫不能点击其他东西?

追问

比如,可以在你的代码后面加:,如果点击了你的输入框,那么就不能点击id为"input1"的输入框。你可以试试,焦点会一直在你的输入框内的

追答这个简单,因为$("#test").blur里面做了position的移位处理后,没有再blur掉,

所以,改进处理下就行了。

改动一部分,如下:
$(document).ready(function()
    $("#test").blur( function() 
        //如果已经失去焦点重置位置再调用失去焦点,直接返回
        if($(this).hasClass("blur")) return false;          
        //添加失去焦点重置位置标记
        $(this).setSelection(0,0).addClass("blur").blur();  
     );
    $("#test").focus( function() 
        //移除失去焦点重置位置标记
        $(this).focusEnd().removeClass("blur");             
     );
);

参考技术B <input id="input1" type="text" value="123456789789" >

    <script>
        var inp=$("#input1")
        inp.on('click',function()
            inp.select();
        );
    </script>

追问

第二个条件没有达到,即当输入框失去焦点时,输入框显示最先输入的文字(文字过多超过输入框显示的情况下)

追答

第二个是浏览器的默认行为,不需要自己设置的,你用的什么浏览器,截图来看下

追问

我用的是IE9测试。确实是你说的那样,在360中可以实现了。如果我想要大部分浏览器都想360那样,应该怎么办?

我输入的是66666666699999999999333333333

当失去焦点时,

,并没有显示最先输入的部分

来自:求助得到的回答本回答被提问者采纳
参考技术B 刚测试了一下,正常的input框就是这样子的呀,这个主要和浏览器有关,您可以换个浏览器试试。
你的这个截图应该是百度的浏览器插件吧,不是百度的搜索框追问

不是这样的哦,input不设置的话,输入的时候确实是那样的,可是失去焦点时显示的是最后输入的部分,并且用光标调整查看文字的情况下,失去焦点时显示的是当时看到的文字部分。另外,这个只是一个例子,说明这三种情况。我想要的是实现这三种情况的功能,在大部分浏览器上。

input文本框获取焦点和失去焦点事件判断

onBlur:当输入框失去焦点后 
onFocus:当输入框获得焦点后

这两个JavaScript事件是写在html标签中的例如:

<input  type="text"    onBlur=" " onFocus=" " />


使用jQuery的实现方法为:

    对于元素的焦点事件,我们可以使用jQuery的焦点函数focus(),blur()。

focus():得到焦点时使用,blur():失去焦点时使用。

代码如下:

 
$("input").focus(); 或$("input").focus(function(){这里是获取焦点时的事件}) 
$("input").blur(); 或$("input").blur(function(){这里是失去焦点时的事件}) 
 

同样可以使用jQuery中提供的:focus伪类来判定元素是否获取焦点;

// Get the focused element:
var $focused = $(:focus);

// No jQuery:
var focused = document.activeElement;

// Does the element have focus:
var hasFocus = $(input).is(:focus);

// No jQuery:
elem === elem.ownerDocument.activeElement;

下面写一个实例:

<!DOCTYPE HTML>
<HTML>
 <HEAD>
  <TITLE> New Document </TITLE>
 </HEAD>
 <style>
    .bor{
        border:3px solid red;
    }
 </style>
<BODY>
    <input type="text"/>
<script type="text/javascript" src="jquery-1.11.3.js"></script>
<script type="text/javascript">
    $(document).ready(function(){
        $("input").focus(function(){
            $(this).addClass("bor");
        });
        $("input").blur(function(){
            $(this).removeClass("bor");
        });
    });
</script>
</BODY>
</HTML>

当然还可以根据获取元素的状态修改其他元素的各项属性,或者是需要发生的事件

 

 

以上是关于jQuery实现当文字过多时,完成输入后(失去焦点),显示输入的前面的文字,隐藏后面的文字的主要内容,如果未能解决你的问题,请参考以下文章

axure7.0如何实现光标在文本框中获得焦点时,文本框内容自动清空。失去焦点时显示默认文字,谢谢!

用jquery怎么实现点击密码输入框,上面的提示文字“请输入密码”消失,失去焦点时候提示文字又存在

用jquery怎么验证名字在输入完之后马上提示有没有重复的代码

input文本框获取焦点和失去焦点事件判断

EXCEL 文本框控件点击文字变很小,失去焦点后又回复正常,这怎么解决?

jquery js 当文本框获得焦点时,自动选中里面的文字