【问题标题】:jQuery not works on <li> elements, but not <a> elementsjQuery 不适用于 <li> 元素,但不适用于 <a> 元素
【发布时间】:2013-01-10 11:36:12
【问题描述】:

我有一些 jQuery 代码在单击具有特定 ID 的项目时运行。它在 ID 是 &lt;li&gt; 元素的一部分时起作用,但在它位于 &lt;a&gt; 元素中时不起作用。为什么会这样?我想使用一个,因为如果用户关闭了 JavaScript,它可以让我实现一些东西。

编辑: preventdefault 或 return false 似乎都没有任何区别。

HTML 和代码如下:

<li><a id="OfficeNav-Bath" class="first" href="#bath">Bath</a></li>

编辑:如果&lt;a&gt; 元素中没有指定 HREF,它会起作用。

$(function() {
    $("#OfficeNav-Bath").click(function(){
        $('.office').removeClass('visible');
    });             
});

知道为什么会这样吗?提前致谢。

【问题讨论】:

  • 能否也给我们html代码?
  • 你能发布一个重现这个错误的小提琴吗?
  • 如果你有多个a 元素,你应该给彼此单独的ID
  • 正如答案所说,href 是一个标签,它与prevenDefault() 无关。
  • 嗨@Cristy - 事实上,这些解决方案不起作用;你知道会发生什么吗?

标签: jquery element


【解决方案1】:

我认为您在使用&lt;a&gt; 标签时并没有阻止默认事件,所以尝试这样做:

$(function() {
   $("#OfficeNav-Bath").click(function(e){
     e.preventDefault();
     $('.office').removeClass('visible');
   });           
});

【讨论】:

  • 嗨 - 恐怕这行不通;这是 Cristy 建议的,因为 HREF 是一个标签而不是完整的 URL?
  • 最终的错误原来是别的东西,但我还需要包括这个,所以选择它作为一个我不知道我需要问的问题的答案!
【解决方案2】:

你必须为点击事件添加一个简单的东西:

e.preventDefault();

【讨论】:

  • 最好经常使用 e.preventDefault();而不是返回false;作为 preventDefault() 继续冒泡
【解决方案3】:

当单击锚元素时,浏览器会尝试导航到锚的 href 属性指向的 URL。

可以在事件处理程序作为参数接收的event 对象上使用preventDefault 方法覆盖此行为。

$("#OfficeNav-Bath").click(function(event){
    event.preventDefault();
    ...
});  

【讨论】:

    猜你喜欢
    • 2011-10-10
    • 2019-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-07
    相关资源
    最近更新 更多