【Sciter】特立独行的mouseenter/mouseleave事件

之前写过一篇介绍Sciter订阅事件的几种方式(https://blog.csdn.net/aqtata/article/details/74783777),都是以click事件为例,没有太深入。今天碰到mouseenter事件不触发的问题,才又去看了下官方手册,发现这个事件在底层实现不同于click。

先看问题代码



	




这段代码初一看似乎应该没问题,意图很明显,期望鼠标进入按钮后输出一个消息,但是实际跑起来却没有任何反应,为什么?

问题在"self.on"这里,self表示的是整个html文档,这里错误地用容器来订阅mouseenter事件,而在sciter设计中,mouseenter/mouseleave事件是在子元素上来捕获的,容器是捕获不到事件的!这一点和click不同,我们看一段click的代码



	




输出:

body:BUTTON_CLICK SINKING
button:BUTTON_CLICK SINKING
button:BUTTON_CLICK
body:BUTTON_CLICK

click事件从容器到子元素,符合我们的预想。
可是在mouseenter/mouseleave事件中就不起作用了



	




无论鼠标在button上移来移去都没有任何输出。不知道作者设计时是出于什么样的考虑。。。但是作为用户只能来踩坑了。



	





但这样只有第一个按钮能响应事件。根据查阅官方论坛得知,常规的订阅方式只能订阅一个DOM,你不得不将每一个DOM都订阅一下,上面的例子可以改成这样



	





但这样做只能订阅现有的按钮事件,后面动态添加的还是不行。

曲线救国



	
	




add

不得不说sciter在一些细节上设计的坑爹。

参考资料:

https://sciter.com/forums/topic/mouseenter-and-mouseleave-are-not-working-after-some-actions/

https://sciter.com/forums/topic/the-mouseenterleave-event-has-never-been-triggered/

你可能感兴趣的:(Sciter)