为啥我实现不了效果

为啥我实现不了效果

<!DOCTYPE html>
<html>
    <head>
    <meta charset="UTF-8">
    <title>输入文本</title>
</head>
<body>
<p>字数限制在30字内,<span id="ky">您还可以输入<b id="sz">30</b> 字</span></p>
<textarea cols="50"  rows="7"  id="text"></textarea>
<script type="text/javascript">
//补充代码
var textjs=document.getElementById("text");
var zs=document.getElementById("ky");
var sy=document.getElementById("sz");
var len=textjs.value.length;
var total=30,over;
            textjs.onkeypress=function(){
    if(len<=30){
        var allow=total-len;
                    sy.innerHTML=allow;
    }else{
        over=len=total;
        zs.innerHTML="您已经超出"+over+"字";
    }
}
</script>
</body>
</html>


正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

3回答
好帮手慕码 2019-10-18 18:17:55

同学你好!

都会输入内容的,这里主要区别的是触发事件时机的不一样;onkeyup是键盘按下抬起才触发,onkeypress、onkeydown是键盘按下就触发了。如下:

http://img1.sycdn.imooc.com//climg/5da95763099a1df004610237.jpg

http://img1.sycdn.imooc.com//climg/5da957550984329e13750844.jpg

同学可按照本段代码测试一下,其他两个鼠标按下的事件onkeypress、onkeydown的区别的话,可以参考第二条回复,建议同学实际测试一下。

如果帮助到了你,欢迎采纳,祝学习愉快~

好帮手慕码 2019-10-17 20:55:11

同学你好!

首先,onkeypress和onkeydown两个都是在按下键盘的时候触发,

http://img1.sycdn.imooc.com//climg/5da8632309d197dc04460045.jpg

当输入第一个字时,按下键盘,但是这时文本框中还没有文字,所以数字不更新,当第二次按下的时候,进行计算,这时文本框中正好,有第一次输入的数字,例如这种情况:

http://img1.sycdn.imooc.com//climg/5da8634109a8498703920105.jpg

而onkeyup是键盘抬起时候触发,所以这里使用onkeyup,避免以上情况;

三个的区别:onkeyup是键盘抬起时候触发,这个是最好辨别的。其他onkeypress和onkeydown,建议同学跟着老师下面的例子实际的测试一下,通过效果来总结它们的区别更能帮助你去理解:

http://img1.sycdn.imooc.com//climg/5da8640d09aedda203580196.jpg

执行顺序的区别:当输入一个1的时候,先触发onkeydown ,然后触发onkeypress 。

http://img1.sycdn.imooc.com//climg/5da8642809a06cab04510106.jpg

onkeypress只会响应字母与数字符号。例如你按Tab, Ctrl,Alt键等这些非数字字母的时候,会发现,onkeypress事件并没有触发,但是onkeydown就会触发。(可以多按几个特殊的键试试哦~~)

http://img1.sycdn.imooc.com//climg/5da8645909426b9404040099.jpg

另外,输入法是中文状态下,也是不会触发onkeypress事件的。(因为老师截图也需要按键,所以触发的次数有点多)

http://img1.sycdn.imooc.com//climg/5da8646f0935830704180148.jpg

如果帮助到了你,欢迎采纳,祝学习愉快~

  • 提问者 慕侠5902054 #1
    老师我键盘按下去,不松开,也会有文字,那岂不是onkeyup。。。这三个在这方面没区别了
    2019-10-18 13:57:16
好帮手慕码 2019-10-17 18:44:06

同学你好!
1.首先onkeypress为键盘按下事件,当输入第一个字时,按下鼠标,但是这时文本框中还没有文字,所以数字不更新,当第二次按下的时候,进行计算,这时文本框中正好,有第一次输入的数字。建议:使用鼠标抬起事件onkeyup;

2.其次,获取len数值,应该是在键盘输入之后才有的,所以应该在onkeyup事件里获取;

3.判断的逻辑不对,应该是30-len大于等于0的时候走if,反之走else;

4.over的值应该是len-total,代码中的减号写成等号了

如下:

http://img1.sycdn.imooc.com//climg/5da8458709f034e108430479.jpg

效果:

http://img1.sycdn.imooc.com//climg/5da845a409fe3a9503610107.jpg

http://img1.sycdn.imooc.com//climg/5da845ac094fb3be03490076.jpg

如果帮助到了你,欢迎采纳,祝学习愉快~

  • 提问者 慕侠5902054 #1
    为啥用onkeyup,三个事件本质啥区别啊
    2019-10-17 19:33:30
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师