jQuery选择器缓存问题

Posted

技术标签:

【中文标题】jQuery选择器缓存问题【英文标题】:jQuery selector caching issue 【发布时间】:2012-08-29 09:16:39 【问题描述】:

问题是,当我每次编写 html 标签的 id 时,下面的代码都可以正常工作。但是当我缓存它们时,它不会。我错过了什么?

这是我的代码:

var NewFormContainer=$("#NewUserFormContainer"), opener=$("#nufcOpen"), closer=$("#nufcClose"), NewForm=$("#NewUserForm");
$(function() 
    $( "#userType" ).buttonset();
    $(".btn").button();

    closer.button(
        icons: 
            primary: "ui-icon-closethick"
        , text: false
    ).click(function()
        NewFormContainer.slideUp("slow");
    );
    opener.click(function()
        NewFormContainer.slideDown("slow");
    );
);

顺便说一句,控制台没有错误。我也在用jQ-UI

【问题讨论】:

【参考方案1】:

dom 准备好时,您需要cache 他们。

$(function() 
    $( "#userType" ).buttonset();
    $(".btn").button();

    var NewFormContainer=$("#NewUserFormContainer"),
        opener=$("#nufcOpen"),
        closer=$("#nufcClose"),
        NewForm=$("#NewUserForm");

    closer.button(
      icons: 
        primary: "ui-icon-closethick"
      , text: false
    ).click(function()
        NewFormContainer.slideUp("slow");
    );

    opener.click(function()
        NewFormContainer.slideDown("slow");
    );
);

【讨论】:

【参考方案2】:

当您缓存它们时,它们会在 document.ready 之前被评估。试试这个:

var NewFormContainer="#NewUserFormContainer", opener="#nufcOpen", closer="#nufcClose", NewForm="#NewUserForm";
$(function() 
  opener = $(opener);
  closer = $(closer);
  NewFormContainer = $(NewFormContainer);
  NewForm = $(NewForm);
  ...

【讨论】:

以上是关于jQuery选择器缓存问题的主要内容,如果未能解决你的问题,请参考以下文章

jQuery 是不是对“选择器”进行任何类型的缓存?

jQuery 或原始 JavaScript 是不是预编译或缓存变量表达式或选择器?

javascript JS / jQuery:缓存选择器

javascript jQuery中的选择器缓存

如何将 jQuery 事件处理程序应用于多个缓存的选择器?

jquery选择器