【问题标题】:Jquery scopejQuery范围
【发布时间】:2009-07-08 05:46:57
【问题描述】:

我刚刚开始学习 Jquery,但是这些示例对我没有多大帮助...

现在,以下代码发生的情况是,我有 4 种表单,我使用链接在每种表单之间切换。但我不知道如何在第一个函数中获取变量“postOptionSelected”以传递给其他函数以显示更多用户选项。我意识到变量不是范围,但我该怎么做?

$(document).ready(function(){

$("#postOptions ul li a").click(function(event){
      var postOptionSelected = $(this).parent("li").attr("class").substr(11);
      $("form#post"+postOptionSelected).css('display', 'block');
      $("form.postForm:not(#post"+postOptionSelected+")").css('display', 'none');
      event.preventDefault();
});

$("form#post"+postOptionSelected+" div#postMore"+postOptionSelected+" a").click(function(event){
   $("form#post"+postOptionSelected+" div#postMore"+postOptionSelected).css('display', 'none');
   $("form#post"+postOptionSelected+" div#postLess"+postOptionSelected).css('display', 'block');
   $("form#post"+postOptionSelected+" div#postView"+postOptionSelected).css('display', 'block');
   event.preventDefault();
});

$("form#post"+postOptionSelected+" div#postLess"+postOptionSelected+" a").click(function(event){
   $("form#post"+postOptionSelected+" div#postLess"+postOptionSelected).css('display', 'none');
   $("form#post"+postOptionSelected+" div#postMore"+postOptionSelected).css('display', 'block');
   $("form#post"+postOptionSelected+" div#postView"+postOptionSelected).css('display', 'none');
   event.preventDefault();
});

});

【问题讨论】:

  • 能否请您也发布您的 HTML 代码?可能有更简单的方法来做您正在寻找的事情。

标签: jquery jquery-ui scope


【解决方案1】:

你的问题不在于变量范围;只是更多/更少的点击处理程序是您一直希望出现在相关锚点上的东西,而不是您添加和删除的东西。除非您真的想删除点击处理程序,否则这并不好玩。试试这个版本。它要求相关的类在所涉及的 DOM 元素上可用,而不仅仅是 ID;希望你会明白它的含义。我还冒昧地使用了您的一些操作的 jQuery 速记版本。

$(document).ready(function(){

    $("#postOptions ul li a").click(function(event){
        var sel = $(this).parent("li").attr("class").substr(11);
        $("form#post"+sel).show();
        $("form.postForm:not(#post"+sel+")").hide();
        event.preventDefault();
    });

    $("form.post div.postMore a").click(function(event){
        $(this).hide();
        $(this).siblings('div.postLess').show();
        $(this).siblings('div.postView').show();
        event.preventDefault();
    });

    $("form.post div.postLess a").click(function(event){
        $(this).hide();
        $(this).siblings('div.postMore').show();
        $(this).siblings('div.postView').hide();
        event.preventDefault();
    });

});

【讨论】:

  • 是的,谢谢。你也教了我一些额外的东西,我已经相应地修改了我的逻辑:) 你有没有一个很好的 jquery 参考链接?
猜你喜欢
  • 2011-07-14
  • 2012-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多