锚链接内的按钮在 Firefox 中有效,但在 Internet Explorer 中无效?

Posted

技术标签:

【中文标题】锚链接内的按钮在 Firefox 中有效,但在 Internet Explorer 中无效?【英文标题】:Button inside of anchor link works in Firefox but not in Internet Explorer? 【发布时间】:2010-10-22 14:48:07 【问题描述】:

除了我的链接之外,我网站中的所有其他内容似乎都与所有浏览器兼容。它们出现在页面上,但不起作用。我的链接代码如下 -

<td bgcolor="#ffffff"  valign="top" >
    <p>
        <a href="sc3.html">
            <button style="width:120;height:25">Super Chem #3</button>
        </a> 
        <a href="91hollywood.html">
            <button style="width:120;height:25">91 Hollywood</button>
        </a> 
        <a href="sbubba.html">
            <button style="width:120;height:25">Super Bubba</button>
        </a> 
        <a href="afgoohash.html">
            <button style="width:120;height:25">Afgoo Hash</button>
        </a> 
        <a href="superjack.html">
            <button style="width:120;height:25">Super Jack</button>
        </a> 
        <a href="sog.html">
            <button style="width:120;height:25">Sugar OG</button>
        </a> 
        <a href="91pk91.html">
            <button style="width:120;height:25">91 x PK</button>
        </a> 
        <a href="jedi1.html">
            <button style="width:120;height:25">Jedi</button>
        </a>
    </p>
    <p>&nbsp;</p>
    <a href="http://indynile99.blogspot.com">
        <button style="width:120;height:25">Blog</button>
    </a>
    <p>&nbsp;</p>
</td>

【问题讨论】:

Link inside a button not working in Firefox的可能重复 【参考方案1】:

&lt;button&gt; 不能包含在 &lt;a&gt; 元素中。正如W3's content model description 的&lt;a&gt; 元素所述:

“必须没有交互式内容后代。”

&lt;button&gt; 被视为interactive content)

要获得您正在寻找的效果,您可以放弃&lt;a&gt; 标签并为每个按钮添加一个简单的事件处理程序,以将浏览器导航到所需位置,例如

<input type="button" value="***.com" onClick="javascript:location.href = 'http://***.com';" />

但是,请考虑不要这样做;常规链接可以正常工作是有原因的:

用户可以立即识别链接并了解他们导航到其他页面 搜索引擎可以将它们识别为链接并关注它们 屏幕阅读器可以将它们识别为链接并适当地建议用户

您还添加了一个完全不必要的要求,即启用 JavaScript 只是为了执行基本导航;这是网络的一个基本方面,我认为这种依赖是不可接受的。

如果需要,您可以使用背景图像或背景颜色、边框和其他技术来设置链接的样式,使它们看起来像按钮,但实际上它们应该是普通链接。

【讨论】:

哇,我听懂了大部分内容,有点过头了...所以,如果我理解正确的话,我要么使用图像作为按钮,要么只是将它们变成普通链接,对吧? @Jason 是的,通常你会使用图片作为链接,或者使用 CSS 设置常规文本链接的样式。 为什么a里面没有按钮?其他答案说可以,请链接到规则或类似的! "您不能在 元素中包含 只有省略才有效。嵌套链接和按钮从未定义过行为。这与不允许嵌套链接的原因相同。【参考方案2】:

为什么不使用type="button" 将所有&lt;button&gt; 转换为&lt;span&gt;,然后使用普通的css 按钮类进行样式设置?刚刚确认这在 IE11 中有效。

【讨论】:

【参考方案3】:

只需将此 jquery 代码插入 HTML 的头部:

<!--[if lt IE 9 ]>
     <script>
        $(document).ready(function()
            $('a > button').click(function()
                window.location.href = $(this).parent().attr('href');
            );
        );
    </script>
<![endif]-->

【讨论】:

【参考方案4】:

这其实很简单,不需要javascript。

首先,将锚点放在按钮内

<button><a href="#">Bar</a></button>

然后,将anchor标签变成块型元素并填充其容器

button a 
  display:block;
  height:100%;
  width:100%;

最后,根据需要添加其他样式。

【讨论】:

这似乎只适用于 Chrome,不适用于 Firefox 或 IE 特别是来自html5 button spec:“必须没有interactive content的后代。”它将锚标记列为第一个示例。【参考方案5】:

这里的问题是链接位于按钮后面,即使在更改 z-index 时也是如此。此标记也无效 (read the spec)。所以链接不起作用的原因是因为您实际上是单击按钮而不是链接。解决方案是更改您的标记。

<button type="button"><a href="yourlink">Link</a></button>

然后根据需要设置样式。一个演示是here。

【讨论】:

这似乎只适用于 Chrome,不适用于 Firefox 或 IE 特别是来自html5 button spec:“必须没有interactive content的后代。”它将锚标记列为第一个示例。【参考方案6】:

如果您使用的是 Twitter bootstrap 之类的框架,您可以简单地将类“btn”添加到 a 标签中——我刚刚接到一个用户关于这个问题的电话,显然我的结帐按钮不起作用,因为我有一个按钮在 a 标签内...相反,我只是向其中添加了 btn 类,它现在可以正常工作了.. 大错误,可能会让客户付出代价-有时我忘记对 IE 中的所有内容进行代码检查..

例如 &lt;a href="link.com" class="btn" &gt;Checkout&lt;/a&gt;

【讨论】:

【参考方案7】:

请注意: W3C 对链接标签内的按钮没有问题,所以它只是另一个 MS 子标准。

回答: 使用代理按钮,除非您想获取完整图像。

代理按钮可以放入标签中(更安全,如果您使用跨度而不是 div)。 它的样式可以看起来像按钮或其他任何东西。 它是通用的 - 一段 css 代码为所有实例提供支持 - 只需定义一次 CSS,然后只需将 html 实例复制并粘贴到您的代码需要的任何位置。 每个按钮都可以有自己的标签 - 非常适合多语言页面(我认为为每种语言制作图片更容易) - 还可以更轻松地在整个脚本中传播实例。 将其宽度调整为标签长度 - 如果您想要的话,也可以采用固定宽度。 IE7 是上面的一个例外 - 它必须有宽度,或者会使这个按钮从一个边缘到另一个边缘 - 或者给它宽度,你可以向左浮动按钮 - IE7 的 css: 一种。 .宽度:150像素; (注意属性前的点,我通常通过添加这样的点来定位 IE7 - 删除点和属性将被所有浏览器读取) 湾。文本对齐:居中; - 如果你有固定宽度,你必须让这个居中文本/标签 C。光标:指针; - 所有 IE 都必须有这个才能正确显示链接指针 - 好的浏览器不需要它 您可以继续使用此代码并使用 CSS3 对其进行样式设置,而不是使用图像: 一种。圆角的半径(限制:IE 将显示为正方形) 湾。渐变使其“像按钮一样”(限制:Opera 不支持渐变,因此请记住为该浏览器设置标准背景颜色) C。使用 :hover pclass 根据鼠标指针位置等更改按钮状态 - 您可以将其仅应用于文本标签或整个按钮

CSS 代码如下

.button_surrogate span  margin:0; display:block; height:25px; text-align:center; cursor:pointer; .width:150px; background:url(left_button_edge.png) left top no-repeat; 

.button_surrogate span span  display:block; padding:0 14px; height:25px; background:url(right_button_edge.png) right top no-repeat; 

.button_surrogate span span span  display:block; overflow:hidden; padding:5px 0 0 0; background:url(button_connector.png) left top repeat-x; 

下面的 HTML 代码(按钮实例)

<a href="#">
  <span class="button_surrogate">
     <span><span><span>YOUR_BUTTON_LABEL</span></span></span>
  </span>
</a>

【讨论】:

当我将按钮放入锚标记时,Firefox 的 HTML 验证器扩展会产生错误:line 36 column 84 - Warning: inserting implicit &lt;a&gt; line 36 column 93 - Warning: discarding unexpected &lt;/button&gt; line 36 column 53 - Warning: missing &lt;/button&gt; line 36 column 37 - Warning: missing &lt;/a&gt; before &lt;/div&gt; 第一句话不正确。 我想指出,这里的 HTML 标记是可怕的,对于任何想要编写可维护的东西的人来说,这是一个不可接受的解决方案。必须记住这种语法本身就很困难,更不用说您可能选择使用的任何其他技巧了。相反,如果您需要支持 IE 8,使用 IE 8 支持的标记可能会有所帮助。叫我老帽子。但我喜欢有效的代码,而不是假装不是的代码。 实际上你应该喜欢它,因为它有效——这符合你的推理。【参考方案8】:
$("a > button").live('click', function()  
    location.href = $(this).closest("a").attr("href");
); // fixed

【讨论】:

对于那些想知道的人来说,这似乎是一段使用过时 jQuery 函数的代码。使用当前版本的 jQuery,您需要将 .live 替换为 .on。如果您使用的是prototypejs,请尝试从 $$ 函数开始。 链接中的按钮不是有效的 HTML 并且具有未定义的行为。 我在 IE8 中遇到了这个问题 你用的jQuery是什么版本的?究竟是什么问题?【参考方案9】:

<form:form method="GET" action="home.do"> <input id="Back" class="sub_but" type="submit" value="Back" /> </form:form>

这很好用,我在 IE9 上测试过。

【讨论】:

这能回答问题吗? Button inside of anchor link works in Firefox but not in Internet Explorer?【参考方案10】:

下面的代码在所有浏览器中都可以正常工作:

<button onClick="location.href = 'http://www.google.com'">Go to Google</button>

【讨论】:

不过,这对于搜索引擎优化不是很好。如果您希望它链接的页面获得高排名,不推荐。【参考方案11】:

由于这只是 IE 中的一个问题,为了解决这个问题,我首先检测浏览器是否为 IE,如果是,则使用 jquery click 事件。我将此代码放入一个全局文件中,以便在整个站点中对其进行修复。

if (navigator.appName === 'Microsoft Internet Explorer')

    $('a input.button').click(function()
    
        window.location = $(this).closest('a').attr('href');
    );

这样我们只需要将点击事件分配给 IE 的链接输入按钮的开销。 注意:上面的代码在一个文档就绪函数中,以确保页面在分配点击事件之前完全加载。

我还为我的输入按钮分配了类名,以节省使用 IE 时的一些开销,以便我可以搜索

$('a input.button')

而不是

$('a input[type=button]')

.

<a href="some_link"><input type="button" class="button" value="some value" /></a>

除此之外,我还利用 CSS 使鼠标悬停在按钮上时看起来可点击:

input.button cursor: pointer

【讨论】:

【参考方案12】:

我发现这对我有用

<input type="button" value="click me" onclick="window.open('http://someurl', 'targetname');">

【讨论】:

【参考方案13】:

a 标记内不能有按钮。但是,您可以执行一些 javascript 来使其正常工作。

【讨论】:

有趣的是,我在 12 年前学习 HTML 时尝试过这个。呵呵。 W3C 是否规定锚点中不能有按钮,或者这只是 Microsoft 的实现? 糟糕的 Microsoft 实施,通常也是不好的做法。规范中没有规定按钮不能进入链接,但这是不好的做法,因为您有 2 个竞争事件需要在用户单击它时发生 - 它是按下按钮还是跟随链接?正是这一点让 IE 感到困惑(以及许多其他事情!),并且有一个很好的理由不这样做。 这是糟糕的 MSFT 实施。 HTML5 的规范规定锚标记可以作为块元素。

以上是关于锚链接内的按钮在 Firefox 中有效,但在 Internet Explorer 中无效?的主要内容,如果未能解决你的问题,请参考以下文章

new Date() 在 Chrome 中有效,但在 Firefox 中无效

无限 CSS 旋转在 Firefox 中有效,但在 Chrome 中无效

Mailto 链接在 Chrome 中没有任何作用,但在 Firefox 中有效?

useLocation 在 GoogleChrome 中有效,但在 Firefox 中无效

jQuery:代码在 Firefox 中有效,但在 IE 中无效

以下 JavaScript 似乎在 Firefox 中有效,但在 Chrome 中无效?