Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/403.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将div直接放置在文本输入字段的右侧_Javascript_Jquery_Html_Css - Fatal编程技术网

Javascript 将div直接放置在文本输入字段的右侧

Javascript 将div直接放置在文本输入字段的右侧,javascript,jquery,html,css,Javascript,Jquery,Html,Css,我正试图将一个div直接放在文本输入字段中键入的文本的右侧。对我来说,这似乎很简单,只需获取输入值val的长度并将div定位到该值即可。但是,当输入字段中有1个字符时,它仅位于文本的正后方。随着键入的内容越来越多,偏移量也越来越大 我试图创建的是一个建议框,它将完成正在键入的单词 我如何定位它,使它在每个键上位于输入值的右侧和右侧 这是一把js小提琴: 下面是我如何在keyup上定位它的: $('input').on('keyup', function(){ $('#suggestion

我正试图将一个div直接放在文本输入字段中键入的文本的右侧。对我来说,这似乎很简单,只需获取输入值val的长度并将div定位到该值即可。但是,当输入字段中有1个字符时,它仅位于文本的正后方。随着键入的内容越来越多,偏移量也越来越大

我试图创建的是一个建议框,它将完成正在键入的单词

我如何定位它,使它在每个键上位于输入值的右侧和右侧

这是一把js小提琴:

下面是我如何在keyup上定位它的:

$('input').on('keyup', function(){
    $('#suggestion').css('left', $(this).val().length+'rem');
});

No matter what units I try, px, em, rem, I get similar results.

您必须计算文本的宽度,然后设置left属性

这里有一个JavaScript函数可以实现这一点

此函数用于创建一个span标记,赋予它与输入标记相同的属性,将输入文本附加到span,然后将span标记附加到DOM,并使用.offsetWidth获取宽度

$'input'。在'keyup'上,函数{ $'suggestion'.css'left',宽度$this.val+1+'px'; }; 函数宽度文本{ var s=document.createElement'span'; var t=document.createTextNodetext s、 儿童; s、 id=‘长度’; s、 style.fontSize='1.2rem'; s、 style.visibly='hidden'; s、 style.opacity='0'; var m=document.getElementById'suggestion'; 对于i=0;idocument.getElementById'Input'。offsetWidth?document.getElementById'Input'。offsetWidth:s.offsetWidth*0.935; }; html, 身体{ 字体大小:16px; } 输入{ 高度:2.618雷姆; 字号:1.2rem; } 暗示{ 高度:1.5雷姆; 宽度:1.5雷姆; 位置:相对位置; 背景:66bb6a; 颜色:000000; 颜色:rgb0,0,0; 字体系列:'Myriad Pro'、'Open Sans'、Sans serif; 顶部:-35px; z指数:2; 溢出:隐藏; 过渡:均为0.2s; }
它也不是紧跟在1个字符的文本之后,只是没有足够的“大小错误”来引起注意。您天真地使用rem作为大小单位,而这并不反映键入字符的实际宽度,只是基于当前字体的标准宽度。抱歉,您当前的整个方法都无法工作,这是一个很好的例子。你应该问一个关于如何解决你的问题的新问题,而不是用一个尝试和不可能的解决方法来寻求帮助。有时是最后一个,有时更多。在此处运行代码段或在此处选中:然后键入mn、、nmsdl、.fn或其他很长的代码段,您将看到它并不完全在右侧,但现在左侧有点太多。