javascript - span inside 按钮,在 Firefox 中不可点击

标签 javascript jquery css html

我的代码


HTML:

<p id="console"></p>
<button>Click <span class="icon"></span>
</button>

JS:

$('.icon').click(function () {
    $('#console').html('Icon has been clicked');
    return false;
});

$('button').click(function () {
    $('#console').html('Button has been clicked');
});

CSS:

.icon {
    background-position: -96px 0;
    display: inline-block;
    width: 14px;
    height: 14px;
    margin-top: 1px;
    line-height: 14px;
    vertical-align: text-top;
    background-image: url("http://twitter.github.com/bootstrap/assets/img/glyphicons-halflings.png"); 
    background-repeat: no-repeat;
}

Demo

问题


我可以在 Chrome 中点击 .icon ,但不能在 Firefox 中点击。当我点击 .icon 时,它会点击整个 button

问题:


我的代码无效吗?如果我的代码有效,那么这个问题的解决方案是什么。

我尝试过的


  1. 我已经尝试从控制台执行 $('.icon').click() 并且它在 ff 中完美运行,所以我猜问题是 spanbutton 内不可点击。

  2. e.preventDefault()e.stopPropagation 也不工作。

  3. 我试过将   放在 span 中,但它也不起作用。

最佳答案

引用spec ,最值得注意的是禁止的内容(在 SGML 定义中;为了帮助阅读,look here):as,forms,form“controls”( inputselect 等)和fieldset

虽然您断言 span(和 div 等)是 button 元素的合法内容是正确的,但是非法的元素都与具有布局/样式以外的任何内容的按钮内容有关。

我在规范中没有看到任何排除您正在尝试做的事情的内容,但我确实看到很多令人沮丧的事情,如果各种浏览器也因不支持它而“劝阻”它,我也不会感到惊讶。

也就是说:如果您想获得跨浏览器支持,请找到另一种方法来做您想做的事。我不明白你到底想做什么,所以我认为不可能提出替代方案。我知道您想对单击按钮和图标做出不同的响应——但这是(很好,顺便说一句)您不希望发生的事情的演示,而不是对您想要解决的实际问题的解释。

一种方法可能是不使用按钮,而是使用另一个 spandiv:

<p id="console"></p>
<div class="button_replace">Click <span class="icon"></span></div>
<script>
  $('.icon').click(function () {
    $('#console').html('Icon has been clicked');
    return false;
  });
  $('.button_replace').click(function () {
    $('#console').html('Button has been clicked');
  });
</script>

关于javascript - span inside 按钮,在 Firefox 中不可点击,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14689879/

相关文章:

javascript - 在 'touchmove' 事件上查看垂直方向拖动了多少像素

css - 将 div 垂直和水平居中

css - FlexSlider iPad/Mac 样式问题(大卡特尔)

javascript - 表单提交后使用 JQuery 替换 div 标签

jquery - 在 LI 元素上使用 jQuery .on()

javascript - jQuery 只允许拉丁字符

javascript - 使用搜索栏在列中过滤具有重复条目的区分大小写的数据并返回该特定行 AngularJS

javascript - 如何以编程方式打开 Bootstrap 下拉菜单

javascript - 在数组内部映射数组

javascript - 网站如何在没有 cookie 或本地存储或数据库存储的情况下存储持久/临时状态?