如何用JavaScript检查string长度
我想获得像StackOverflow这样按下键时的string长度。
我试图用onblur
做到这一点,但它不工作。 我该怎么做呢?
至于你应该使用哪个事件的问题: 使用input
事件,并回退到旧版浏览器的keyup
/ keydown
。
下面是一个DOM0样式的例子:
someElement.oninput = function() { this.onkeydown = null; // Your code goes here }; someElement.onkeydown = function() { // Your code goes here };
另一个问题是如何计算string中的字符数。 根据你的“性格”的定义,到目前为止发布的所有答案都是不正确的。 当你确定只有BMP Unicode符号被input时, string.length
答案是可靠的。 例如, 'a'.length == 1
,就像你所期望的那样。
但是,对于补充(非BMP)符号,事情有点不同。 例如, '𝌆'.length == 2
,即使这里只有一个Unicode符号。 这是因为JavaScript将UCS-2代码单元暴露为“字符” 。
幸运的是,仍然有可能通过一些hackery来统计JavaScriptstring中的Unicode符号的数量。 您可以使用Punycode.js的实用函数在UCS-2string和Unicode代码点之间进行转换:
// `String.length` replacement that only counts full Unicode characters punycode.ucs2.decode('a').length; // 1 punycode.ucs2.decode('𝌆').length; // 1 (note that `'𝌆'.length == 2`!)
PS我只注意到堆栈溢出使用的计数器脚本得到这个错误。 尝试input𝌆
,你会发现它(错误地)计为两个字符。
更新:由于我写了这个,input事件得到了体面的支持。 在IE9中仍然不是100%,所以你必须等待一段时间,直到IE9被完全淘汰。 然而,根据我对这个问题的回答,投入不仅仅是我提出的方法的一个体面的替代品,所以我推荐切换。
使用关键事件
var inp = document.getElementById('myinput'); var chars = document.getElementById('chars'); inp.onkeyup = function() { chars.innerHTML = inp.value.length; }
<input id="myinput"><span id="chars">0</span>
您应该将函数绑定到keyup事件
textarea.keyup = function(){ textarea.value.length.... }
与jQuery
$('textarea').keyup(function(){ var length = $(this).val().length; });
快速和肮脏的方式将是简单绑定到keyup
事件。
$('#mytxt').keyup(function(){ $('#divlen').text('you typed ' + this.value.length + ' characters'); });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <input type=text id=mytxt > <div id=divlen></div>
var myString = 'sample String'; var length = myString.length ;
首先你需要定义一个按键处理程序或某种事件触发器来听,顺便说一句,得到的长度真的很简单,就像上面提到的
function cool(d) { alert(d.value.length); }
<input type="text" value="" onblur="cool(this)">
我不确定你试过onblur是什么意思,但是为了得到任何string的长度,使用它的.length属性,所以在文本框或者textarea的情况下:
document.getElementById("textarea").value.length
改变这个ID,当然,不pipe实际的ID是什么。
基本上:为<textarea>
元素分配一个keyup
处理程序,在它里面计算<textarea>
的长度,并且如果计数长度小于最小值,则将计数写入单独的<div>
。
这是一个例子 –
var min = 15; document.querySelector('#tst').onkeyup = function(e){ document.querySelector('#counter').innerHTML = this.value.length < min ? (min - this.value.length)+' to go...' : ''; }
body {font: normal 0.8em verdana, arial;} #counter {color: grey}
<textarea id="tst" cols="60" rows="10"></textarea> <div id="counter"></div>
留下回复(和问题标题的答案 ),对于未来的谷歌…
您可以使用.length
来获取string的长度。
var x ='Mozilla'; var empty ='';
console.log('Mozilla是'+ x.length +'代码单元长');
/ *“Mozilla是7个单元长”* /
console.log('空string的长度为'+ empty.length');
/ *“空string的长度为0”* /
如果你打算得到一个textarea
的长度说 id="txtarea"
那么你可以使用下面的代码。
txtarea = document.getElementById('txtarea'); console.log(txtarea.value.length);
你应该能够摆脱与BMP Unicode符号的使用。 如果你想支持像(😂)那样的“非BMP符号”,那么它是一个边缘情况,你需要find一些解决办法。