绑定focus事件的函数里绑定键盘事件造成的冲突?错误?

来源:互联网 发布:ipad怎么看淘宝直播间 编辑:程序博客网 时间:2024/05/16 17:15

折腾了一天,作为前端开发初学者,来写篇心得和笔记咯。

有些时候,简单的代码蕴涵了深奥的语法规则,或者浏览器引擎的原理,当然,具体什么原理,到现在也还没搞清楚,知道的人可以q我247069512,谢谢。

废话不多说,textarea中回车提交的一个问题,代码:

<span style="font-size:14px;">        $(document).ready(function(){            $('#btn').on('click',function(){                alert('btn被点击了')            })//     注释了       $('#word').on('focus',function(){                $('#word').keydown(function(e){                    e=window.event||e                    if(e.keyCode==13|| e.which==13){                        e.preventDefault()                        $('#btn').click()                    }                })            })//    注释了    })</span>
对应的html很简单,一个#btn按钮,一个#word textarea,作为一个只学过c c++的人来说。一下子使用js jq这样的面向对象的语言,从思想上一不注意就跑偏了,更别说js jq还具有事件这个很特殊的东东,如代码--我想当然的想要为键盘事件监听设定限制,就是得在focus的时候才设置监听,监听完了判定,是否为回车然后,执行btn的点击事件,然而确忽略了事件绑定,并不是像c那样面向过程的,一步一步来的,一不注意,‘嵌套’的事件绑定就成了一种循环,递归。。如果不注释代码的两段,第一次按回车,会点击一次btn,然后再回车,会点击两次btn 然后再回车的话,就是三次,一直累加。。我开始一直没搞懂为什么,这就很显然是一种面向过程思想带来的误区。总错误的觉得,focus是一种限制状态,在这种状态下才监听键盘事件,而实际上,程序总不会像我们想要的方式执行,而是以我们告诉它的方式执行,上个例子中,每一次我们回车,执行click,文本框会失去焦点,然后又获得焦点,这一瞬间,又进行了一次focus事件执行-->事件监听,但是这仅仅只是解释了注释的代码是多余的。思路是不正确的。。至于为什么回车事件,为递增,触发每一次+1的click事件。我仍然无法解释。。希望对js jq理解更深刻的朋友告诉我其中的原理。。


1 0
原创粉丝点击