Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/433.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 字体图标防止单击父按钮_Javascript_Css_Twitter Bootstrap_Font Awesome - Fatal编程技术网

Javascript 字体图标防止单击父按钮

Javascript 字体图标防止单击父按钮,javascript,css,twitter-bootstrap,font-awesome,Javascript,Css,Twitter Bootstrap,Font Awesome,我遇到了一个问题,我在按钮元素中放置的字体超棒图标的左两个像素没有触发按钮的单击事件 下面是一个示例按钮: <button class="btn btn-mini"> <i class="icon-edit"></i> </button> 下面是引导的样子 你知道为什么剩下的两个像素不会触发点击事件吗 编辑:这是一个测试站点,我在这里重新创建了该问题:大纲 该控件不是CSS框的一部分,这意味着它不会触发单击事件。这可能有点违反直觉,

我遇到了一个问题,我在按钮元素中放置的字体超棒图标的左两个像素没有触发按钮的单击事件

下面是一个示例按钮:

<button class="btn btn-mini">
    <i class="icon-edit"></i>
</button>

下面是引导的样子

你知道为什么剩下的两个像素不会触发点击事件吗

编辑:这是一个测试站点,我在这里重新创建了该问题:

大纲 该控件不是CSS框的一部分,这意味着它不会触发单击事件。这可能有点违反直觉,但这就是它的工作原理

您的页面在
.btn:focus
上设置了一个大纲,但这似乎不是问题,因为它的偏移量为-2(意味着它显示在框内,而不是框外)

将长方体移动到:活动 您可以在
:active
上移动框,这可能会产生整洁的效果,但首先移动框,然后将触发单击事件,这将使用移动的位置。
您可以通过按住鼠标按钮看到这一点;长方体将移动,但在释放按钮之前不会触发事件。因此,如果到那时将方框向右移动10个像素,那么左边的10个像素将不会起任何作用。
这是根据规范,来自:

单击
单击元素上的定点设备按钮时,会发生单击事件。单击被定义为鼠标向下和鼠标向上 在同一屏幕位置。这些事件的顺序是:

  • 穆斯敦
  • 鼠标
  • 点击
这似乎就是问题所在,以下CSS似乎可以解决这个问题:

button.btn:active { 
    left: 1px;
    top: 1px;
}
例子 以下是演示这两个问题的脚本:

<!DOCTYPE html>
<html><head><style>
    body { margin-left: 30px; }
    div {
        background-color: red;
        border: 20px solid green;
        outline: 20px solid blue;
        width: 100px;
        height: 100px;
        position: relative;
    }

    div:active {
        left: 20px;
        top: 20px;
    }
</style></head> <body>
<div></div>

<script src="http://code.jquery.com/jquery-1.11.0.min.js"></script>
<script>
    $('div').on('click', function(e) {
        alert('click!');
    });
</script></body></html>

正文{左边距:30px;}
div{
背景色:红色;
边框:20px纯绿;
轮廓:20px纯蓝;
宽度:100px;
高度:100px;
位置:相对位置;
}
分区:活动{
左:20px;
顶部:20px;
}
$('div')。在('click',函数(e)上{
警报('click!');
});

我知道这篇文章已经有4年历史了,但它可能会帮助人们理解为什么按钮中的字体“图标”会阻止点击事件

渲染时,icon类会在图标标记中添加一个::before伪元素,以防止按钮的单击事件

鉴于这种情况,我们应该明确地看一下

指针事件属性定义元素是否反应 指向指针事件

因此,我们只需要为按钮中的“图标”添加css声明:

button > i {
    pointer-events: none;
} 

你能在jsfiddle.net上发布一个例子来说明这个问题吗。我不能,这似乎更多地与我正在使用的框架有关。我将尝试发布一个示例站点。查看CSS检查器,图标或按钮都不显示大纲属性。(很高兴知道)@cswilby它似乎在
.btn:focus
:-)我已经更新了我的答案。我只是在Chrome上尝试了一下,但恐怕没有运气,当我放大按钮并在编辑图标的左行内单击时,单击事件仍然没有触发:(@Cameron Wilby你说得对,对不起。我一定错过了click,这是一个非常小的区域,我遇到了运动技能更好的3岁孩子。我再次更新了我的答案,确保我没有错过click…我当然希望这次我做对了…问题一直存在!这是一个狡猾的问题。