html 点击子元素,【已解决】html中外部大区域父元素和内部小区域子元素同时支持点击事件...

折腾:

【未解决】给绘本查询web版增加点击tag标签搜索

期间,遇到一个问题,对于html页面:

对于某个tag:

0fdf33b988012cab5ba43eec23bf1853.png

去加上了click事件的支持:function tagClickCallback(event){

console.log("tagClickCallback: event=%o", event)

console.log("this=%o", this)

var clickedTagStr = $(this).text()

console.log("clickedTagStr=%s", clickedTagStr)

}

$(document).on("click", ".book_list_single_tag", tagClickCallback)

但是调试才发现,想起来:

之前对于此tag所处于的父级元素,整个div,原先也是已经支持了点击事件的:

c6b2ab9f73e1d55fb9c59a8814f13d13.pngfunction saveInputAndRedirect(event){

console.log("saveInputAndRedirect: event=%o", event)

console.log("this=%o", this)

var curInput = $("#inputQuery").val()

console.log("curInput=%s", curInput)

event.data = {

"curInput": curInput,

"curElement": this,

}

console.log("event.data=%o", event.data)

// redirectToDetailPage.bind(this)

redirectToDetailPage(event)

}

$(document).on("click", ".single_storybook_item", saveInputAndRedirect)

所以此时点击tag时,其实只有父级元素响应了click,导致内部元素tag没法响应click了。

希望:

对于外层,父级区域的元素,支持click点击,响应事件

同时,如果只是点击了tag所属区域,则响应tag的click的事件

html parent and child booth click

html parent child  click

这个就是所谓的:event bubbling 事件冒泡(上报)

好像是:

点击child,则不上报event给parent,好像就可以了?Event capturing

When you use event capturing

| |

---------------| |-----------------

| element1     | |                |

|   -----------| |-----------     |

|   |element2  \ /          |     |

|   -------------------------     |

|        Event CAPTURING          |

-----------------------------------

the event handler of element1 fires first, the event handler of element2 fires last.

Event bubbling

When you use event bubbling

/ \

---------------| |-----------------

| element1     | |                |

|   -----------| |-----------     |

|   |element2  | |          |     |

|   -------------------------     |

|        Event BUBBLING           |

-----------------------------------

the event handler of element2 fires first, the event handler of element1 fires last.

试试:

event.stopPropagation()

给parent的single_storybook_item加上试试:function saveInputAndRedirect(event){

event.stopPropagation()

。。。

}

$(document).on("click", ".single_storybook_item", saveInputAndRedirect)

结果问题依旧:

点击了tag还是跳转到详情页

感觉错了?应该加到child的元素上?

去试试function tagClickCallback(event){

event.stopPropagation()

...

}

$(document).on("click", ".book_list_single_tag", tagClickCallback)

结果:

是对的:

df181f5177b87bf4f84a36b6e38a56ec.png

再去去掉parent中的event.stopPropagation,也是同样的正确的效果:

点击child区域,响应child的click事件:

c26f928e5e1960fc6dbc20734f787e5b.png

点击parent的区域,响应parent的click事件

跳转新页面了:

eb16f387a345fd08819be0e337dd1d31.png

【总结】

对于此处的:

...

Opposites and Contrasts

...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值