be-fe / iSlider

Smooth mobile touch slider for Mobile WebApp, HTML5 App, Hybrid App
http://be-fe.github.io/iSlider/
MIT License
1.66k stars 448 forks source link

Bug: 在画面如果有表单的时候,表单Input点击不了,求解决 #194

Closed ioriandy4 closed 9 years ago

ioriandy4 commented 9 years ago

用了fixepage:true参数,在画面dom如果有表单的时候,表单Input点击不了,求解决,,,,我看了作者的代码,有判断如果点击的是a链接,就用js跳转,是否表单也要这样判断?我觉得就算阻止了画面点击的默认时间,但是画面里面的dom点击默认事件应该不会跟着取消吧,只要不冒泡下去就OK了

xieyu33333 commented 9 years ago

都会取消的,touchstart的触发优先级更高,在touchstart这一层阻止默认事件就会导致链接、input这类无法正常操作。如果急用的话你可以根据自己的需要先fork一个版本加入input的适配,或者尝试使用fixPage: false。后续我会解决这个问题,谢谢~

xieyu33333 commented 9 years ago

已解决

elvinzhu commented 8 years ago

点击事件都不冒泡了, DOM元素会重新生成。。。。 继而导致很多问题 不是很理解为何要这样设计!

xieyu33333 commented 8 years ago

@elvinzhu 目前版本支持content中插入dom元素, 就不会重新生成,如果content是字符串,事件绑定的时候则需要用到事件代理,如果只是少量静态页面切换需求的话,你可以选择swiper.js, iSlider针对的是页面较多的情况。

elvinzhu commented 8 years ago

@xieyu33333 由于你里面是用到 e.preventDefault, 事件代理也是不执行的

shinate commented 8 years ago

表单组件并没有进行阻止,有专门的白名单策略

xieyu33333 commented 8 years ago

可能用的是老版本吧,老版本没设白名单

elvinzhu commented 8 years ago

@xieyu33333 昨天刚从build 目录下拿的。。。

但是我不明白的是为什么要preventDefault 呢, 方便透露一下吗

shinate commented 8 years ago

考虑到滑动优先,因为交给开发者来做未免太繁琐了。 如果需要,fixPage设置为false的时候,会默认全部关闭preventDefault。

if (this.fixPage && iSlider.FIX_PAGE_TAGS.indexOf(evt.target.tagName.toUpperCase()) < 0 && !this._isItself(evt.target)) {
    evt.preventDefault();
}

fixPage为有值的情况,会去检测白名单中的表单元素,同时检测自定义白名单的策略,比如 fixPage: ['.node_in_whitelist', '#single_node_in_whitelist']