如何通过点击正确的方式处理jQuery?

时间:2013-06-19 09:14:05

标签: javascript jquery performance

我正在制作一个带有Off Canvas菜单的小型Web应用程序,其中每个项目都执行特定的功能。我与谷歌的研究表明,jQuery的.on("click", ...优于attr onclick("myFunction()")。该函数将从HTML文件(“存储”在隐藏的div中)和带有ajax的动态数据(JSON)中的静态数据加载到视口的div中。

所以这是我的问题:我知道有很多解决方案可以实现这样的目标,但这是一种“优质高效”的方式吗?也许这是一个愚蠢的问题,但我正在学习:)非常感谢你!

HTML

<ul>
    <li><a class="home" href="#">Home</a></li>
    <li><a class="credits" href="#">Credits</a></li>
</ul>

JavaScript (对于静态数据)

$(".sidebar a").on("click", function(ev) {
    // get class from clicked menu item
    var sidebar_class = $(this).attr("class");

    // load static data from hidden div into .container
    // e.g. .credits would load .page-credits
    $(".container").html($(".page-"+sidebar_class).html());

    // hide sidebar again
    hideSidebar();
});

2 个答案:

答案 0 :(得分:1)

您发布的代码没有错,其他有效的替代方案是:

$(".sidebar a").click(function() { //you don't ned the ev and you can use the click() method that is the same of on("click"

$(".sidebar").on("click", "a", function() { //you have a single delegate listener for all as instead of one listener for each one.

答案 1 :(得分:0)

对于动态数据(使用btw静态数据),请使用委托:

$(document).on("click",".sidebar a", function(ev) {
    // get class from clicked menu item
    var sidebar_class = $(this).attr("class");

    // load static data from hidden div into .container
    // e.g. .credits would load .page-credits
    $(".container").html($(".page-"+sidebar_class).html());

    // hide sidebar again
    hideSidebar();
});

这里我使用的是文档,但你应该使用最接近动态内容的静态容器。