一、點擊失效
描述:將點擊事件(click)委派在document或者body上,且目標元素為默認不可點擊的元素時(非<a>、 <button>而是<span>等),點擊失效。
實例代碼:
<body> <div class="page-content"> <ol class="scence-hot"> <li data-id="1-1" data-type="1" data-event="J_storeHotBtn"></li> </ol> </div> </body>
// 點擊事件按鈕
$('body').on('click', '[data-event]', function(e) {
var arr = $(this).data('event').match(/J_(\w+)Btn/);
var selector = arr[1];
switch (selector) {
case 'storeHot':
$targetElem = $targetElem.parent('li').length ? $targetElem.parent('li') : $targetElem;
var type = $targetElem.data('type');
var id = $targetElem.data('id');
switch (type) {
case 1:
self._createDialog('hot-store', '', id);
break;
case 2:
self._createDialog('hot-hb', '', id);
break;
case 3:
self._createDialog('hot-hb-simple', '', id);
break;
}
break;
}
});
解決辦法有五種:
1、取消事件委派,將事件直接綁定在目標元素本身上;
2、將目標元素更換成默認可點擊的元素,如<a>、<button>;
3、將事件委派在非document或body上;
4、將目標元素增加樣式cursor:pointer;
5、將click事件換成touch事件。
方案3為最佳方案,其他三種的代價相對較大。方案1,不便於代碼的管理、性能等;方案2,區塊的點擊無法實現(語義等方面考慮);方案4,影響展現,會改變原有的交互體驗。方案3幾乎沒有以上幾點缺點。
二、點擊閃屏
ios下閃屏問題,由事件委派引發,解決方案如下:
1、去除事件委派;
2、給委派的元素加上屬性
-webkit-tap-highlight-color: rgba(0,0,0,0);
-webkit-user-select: none;
方案2為最佳方案。