触摸和点击的不同行为

时间:2015-07-02 15:21:22

标签: javascript twitter-bootstrap-3 touch-event bootstrap-popover

我正在使用Bootstrap Popovers在我的UI中提供“帮助文本”。

我现有的JavaScript:

// add "tooltips" via popover
$('[data-toggle="popover"]').popover({
    container: 'body',
    trigger: 'hover',
    placement: 'auto bottom'
});

当我用鼠标悬停或触摸元素时,弹出窗口显示。我的问题是锚标签元素。如果弹出窗口由 触摸事件 触发:

  1. 请勿点击链接
  2. 将锚标记元素添加到Popover文本以提供对基础链接的访问

2 个答案:

答案 0 :(得分:1)

我检测用户是否在触控设备上,然后从数据属性中提供不同的内容。使用Popover方法触发各种操作。

<a href="#" 
  data-href="http://jsfiddle.net" 
  data-toggle="popover" 
  title="A popover title" 
  data-hover-content="No link here." 
  data-touch-content="<a href='http://jsfiddle.net'>
    A link here</a>.">A popover link
</a>

var is_touch_device = 'ontouchstart' in document.documentElement;

$('[data-toggle="popover"]').popover({
    container: 'body',
    trigger: 'manual',
    placement: 'auto bottom',
    html: true,
    content: function () {
        if (is_touch_device) {
            return $(this).attr('data-touch-content');
        } else {
            return $(this).attr('data-hover-content');
        }
    }
})
.on('mouseenter touch', function (e) {
    $(this).popover('show');
})
.on('mouseleave', function () {
    $(this).popover('hide');
})
.on('click', function () {
    if (!is_touch_device) {
        window.location.href = $(this).attr('data-href');
    }
});

<强> Fiddle demo

这可能会稍微简化一下。当然,您可以在内容功能中指定您的内容。

答案 1 :(得分:0)

这可能会有所帮助:

event.preventDefault()

“说明:如果调用此方法,则不会触发事件的默认操作...例如,单击的锚点不会将浏览器带到新的URL ...”