问答详情
源自:3-1 jQuery表单事件之blur与focus事件

求解两段代码

这段代码为什么没有效果$(".aaron").focus(function() {$(this).css('border', '2px solid red') })

不是focus()在元素本身产生,focusin()在元素包含的元素中产生
那么这段代码不应该是点击div的时候里层的input就有效果  但是为什么一定点在input上才有效果$(".aaron1").focusin(function() {

        $(this).find('input').val('冒泡捕获了focusin事件')

    })


提问者:慕粉小妞 2016-12-24 10:29

个回答

  • xuqiang1996
    2017-03-23 20:41:09

    楼上说的有道理,个人理解是:表单元素可以用focus、focusin、blur、focusout来触发相应的事件,但对于div等只能用focusin和focusout来触发事件,也就是div上有这个事件,点击input就能触发。

  • 说来有点可笑
    2017-02-28 13:53:16

    因为div这个元素不支持focus。由于focus不进行冒泡针对本身,所以要么直接让input用focus,要么就用focusin冒泡传给input。

  • 慕数据5775487
    2017-01-02 02:14:58

    跟没说一样,不理解才问,说的跟课程里面的一样等于没解释,我也懵逼了!

  • coding_Boy
    2016-12-24 21:04:46

    我第一次看错了,代码中的.aaron指向的是input外层的div,所以,你这个代码会对外层的div起作用!

    .focusin()方法和.focus()的事件源不同~· 举个例子 <p><input type="text" /></p> 其中input元素可以触发focus()事件;p是input的父元素,当它包含的元素input触发了focus事件时,它就产生了focusin()事件。 个人理解为:focus()在元素本身产生,focusin()在元素包含的元素中产生。


  • coding_Boy
    2016-12-24 20:54:52

    你这段代码本身拼写就错了:$(".aaron").focus(function() {$(this).css('border', '2px solid red') }),改正拼写就好了,正确代码:$(".aaron2").focusin(function() {$(this).css('border', '2px solid red') })!