jQuery:为啥我在 li 元素上的点击事件不起作用?

Posted

技术标签:

【中文标题】jQuery:为啥我在 li 元素上的点击事件不起作用?【英文标题】:jQuery: Why does my click event on a li element not work?jQuery:为什么我在 li 元素上的点击事件不起作用? 【发布时间】:2013-07-09 17:23:51 【问题描述】:

当点击 li 元素时,我想移动 Div 元素“nav”。

我在 div 中有一个列表

<div id="nav">
    <ul>
        <li><a href="#t1">Flyer</a></li>
        <li><a href="#t2">Code</a></li>
        <li><a href="#t3">Angebot</a></li>
        <li><a href="#t4">Bilder</a></li>
    </ul>
</div>  

为什么这在 jquery 中不起作用:

$("#nav ul li").click(function()
    $("#nav").animate( 
        marginLeft: "-300px",
    , 1000 );
);

【问题讨论】:

一切如你所愿:jsfiddle.net/zet2d/1 所以...这应该可以工作..它有什么问题?? 您的代码运行良好(链接)[jsfiddle.net/chiragvidani/eY2yF/] 你在哪里添加你的javascript代码? &lt;div id="nav"&gt; 之前还是之后? 别忘了将你的代码添加到$(docuement).ready(function()/* your code */) 【参考方案1】:

根据您使用的 Jquery 版本,这可能会或可能不会起作用:

$('body').on('click', '#nav ul li', function()
    $("#nav").animate( 
        marginLeft: "-300px",
    , 1000 );
);

我做了 $('body') 是因为如果您动态生成这些 li,那么您需要在调用它们时绑定“委托事件”。

【讨论】:

英雄! +1 动态知识。【参考方案2】:

代码运行正常,请查看JSFiddle。

我感觉你忘记了一些东西,比如把它放在 jQuery DOM Ready 事件中。

确保您的代码看起来像这样(在 DOM 内部就绪)

$(document).ready(function() // When the DOM is Ready, then bind the click
    $("#nav ul li").click(function()
        $("#nav").animate( 
            marginLeft: "-300px",
        , 1000 );
    );
);

确保您的页面上没有其他 javascript 错误(如果您在此代码之前这样做,代码将不起作用),检查您的控制台(在 chrome 中右键单击 > 检查元素 > 控制台)。

这两个问题中的一个(很可能)导致了您的问题,否则您将不得不自己调试(或向我们展示更多代码)。

【讨论】:

是的,伙计!忘记准备功能....那是一个非常糟糕的错误!感谢所有这些答案......但这只是世界上最简单的事情:-)【参考方案3】:

它按预期工作,但您必须单击 li 元素。如果您单击锚点,它可能会在某些浏览器上中断。

这是一个更好的方法。

HTML

<div id="nav">
 <ul>
 <li><a href="#t1">Flyer</a></li>
 <li><a href="#t2">Code</a></li>
 <li><a href="#t3">Angebot</a></li>
 <li><a href="#t4">Bilder</a></li>
 </ul></div>

jQuery

(function($) 
    var nav = $('#nav');

    nav.find('a').on('click',function(e)
        e.preventDefault();
        nav.animate( 
            marginLeft: "-300px",
        , 1000 );
    );
)(jQuery);

当然,小提琴:http://jsfiddle.net/dKPqJ/

【讨论】:

【参考方案4】:

试试这个,我认为你的代码也没有错误。

据我所知,如果您为 #nav 提供 float:left 属性,您的代码将起作用。

如果你设置了position,那么下面的代码就会起作用。

$(document).ready(function()
 $("#nav ul li").click(function()
 
    $("#nav").animate( 
     left: "-=300px",
    , 1000 );
 );
);

或者试试这个

$(document).ready(function()
 $("#nav ul li").click(function()
 
   $("#nav").animate(
       "left": "-=300px"
    ,
  "slow");
 );
);

【讨论】:

以上是关于jQuery:为啥我在 li 元素上的点击事件不起作用?的主要内容,如果未能解决你的问题,请参考以下文章

我使用jquery中的append方法,动态添加新的元素内容,新添加的元素上的onlick事件不起作用。

Jquery如何给ul下每个li都加上点击事件

jQuery绑定动态元素的点击事件无效

点击事件在 iPhone 4s 上不起作用

jquery如何判断所点击元素是哪个

jquery里为HTML元素设置点击事件,符合条件便禁止点击实现的方法