Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 我的for循环有什么问题_Jquery_Html_Css_For Loop - Fatal编程技术网

Jquery 我的for循环有什么问题

Jquery 我的for循环有什么问题,jquery,html,css,for-loop,Jquery,Html,Css,For Loop,我有一个Jquery for循环,当我单击一个元素时,它会被激活,这个元素除了它本身之外还有相同的类,尽管它什么都不做 以下是循环: $('.container').click(function(){ for(i = 1; i != 20; i++) { $('.container' + i + ' h1 a').click(function(){ $('.container:not(.container' + i +')').hide();

我有一个Jquery for循环,当我单击一个元素时,它会被激活,这个元素除了它本身之外还有相同的类,尽管它什么都不做

以下是循环:

$('.container').click(function(){
    for(i = 1; i != 20; i++) {
        $('.container' + i + ' h1 a').click(function(){
            $('.container:not(.container' + i +')').hide();
        });
    }
});
HTML:


内容

内容

内容

我环顾四周,发现问题在于不能在for循环中运行函数

我知道我可以用exstensive代码来做,但我认为随着更多容器的添加,这样做会更容易

提前谢谢

我想把它们都隐藏起来,除了单击的那一个

我相信你想要的是这样的:

var $container = $('.container').click(function(){
    $container.not(this).hide();
});
$(function () {
    $('p').click(function () {
        $('.container').not($(this).parents()).hide();
    });
});

如果单击容器,则会隐藏所有其他容器


现有代码存在几个问题:

  • 您正在循环中创建一个函数。由于闭包是如何在JavaScript中实现的,如果您试图访问函数内部的loo变量,这可能会导致意外行为(确实如此)。请看

  • 无论何时单击任何其他
    .container
    元素,都会将新的单击事件处理程序绑定到这些元素。也就是说,单击三个元素后,每个容器都会附加三个附加的事件处理程序,每个容器都会执行相同的操作

我想把它们都隐藏起来,除了单击的那一个

我相信你想要的是这样的:

var $container = $('.container').click(function(){
    $container.not(this).hide();
});
$(function () {
    $('p').click(function () {
        $('.container').not($(this).parents()).hide();
    });
});

如果单击容器,则会隐藏所有其他容器


现有代码存在几个问题:

  • 您正在循环中创建一个函数。由于闭包是如何在JavaScript中实现的,如果您试图访问函数内部的loo变量,这可能会导致意外行为(确实如此)。请看

  • 无论何时单击任何其他
    .container
    元素,都会将新的单击事件处理程序绑定到这些元素。也就是说,单击三个元素后,每个容器都会附加三个附加的事件处理程序,每个容器都会执行相同的操作


    • 你把这条路弄得太复杂了

      如果要在单击某个容器时隐藏所有其他容器,可以执行以下操作:

      $(function () {
          $('.container').click(function () {
              $('.container').not(this).hide();
         });
      });
      
      下面是一个例子

      如果要使其成为必须单击的
      标记,可以这样做:

      var $container = $('.container').click(function(){
          $container.not(this).hide();
      });
      
      $(function () {
          $('p').click(function () {
              $('.container').not($(this).parents()).hide();
          });
      });
      

      另一个

      你把这条路弄得太复杂了

      如果要在单击某个容器时隐藏所有其他容器,可以执行以下操作:

      $(function () {
          $('.container').click(function () {
              $('.container').not(this).hide();
         });
      });
      
      下面是一个例子

      如果要使其成为必须单击的
      标记,可以这样做:

      var $container = $('.container').click(function(){
          $container.not(this).hide();
      });
      
      $(function () {
          $('p').click(function () {
              $('.container').not($(this).parents()).hide();
          });
      });
      

      另一个

      您需要将对i的引用作为参数传递给内部函数,以便i现在是函数的局部。看起来您正在基于对外部div的单击绑定多个事件,然后将多个单击事件绑定到div的内部锚定标记,以隐藏不是锚定标记父级的所有div

      以下是我的解决方案:

      HTML

      首先,我将所有“container”div包装在一个wrapper div(“#wrapper”)中,该div用作查找容器的上下文。这仅仅是因为通过id、标记或上下文查找元素要比通过类名查找快得多。总是

      我保存了对包装器($context)的引用,然后从$context中找到了类为“container”的所有div,还保存了对该类的引用

      其次,我没有将click函数绑定到每个链接,而是在单击上下文中的链接时将click事件委托给$context(1个事件绑定,而不是20个事件绑定)。我还使用jQuery的.on()方法,这是jQuery1.7+推荐的方法

      那么,委托给$context的click事件中发生了什么?.on()方法正在指定与“.container a”匹配的元素上的“click”事件,然后指定要执行的函数。在函数中,这是对正在单击的链接的引用

      将保存正在单击的链接以及父div.container的类,例如“container.container1”。您会注意到,由于链接嵌套在其他几个元素中,因此需要遍历多个父元素才能找到它

      现在这些都保存好了,我使用jQuery的.each()方法遍历保存在$containers中的所有容器。我们需要检查所有没有我们找到的类(ParentClassOfachor)的容器并隐藏它们。在.each()函数中,这不是对链接的引用,而是对循环中当前div.container($theCurrentContianer)的引用。然后我们使用一个简单的if语句来检查它是否没有我们想要显示的类,在这种情况下,我们隐藏了这个div


      我希望这有帮助!如果您希望对单击事件进行更多操作,请告诉我。

      您需要将对i的引用作为参数传递给内部函数,以便i现在是函数的本地参数。看起来您正在基于对外部div的单击绑定多个事件,然后将多个单击事件绑定到div的内部锚定标记,以隐藏不是锚定标记父级的所有div

      以下是我的解决方案:

      HTML

      首先,我将所有“container”div包装在一个wrapper div(“#wrapper”)中,该div用作查找容器的上下文。这仅仅是因为通过id、标记或上下文查找元素要比通过类名查找快得多。总是

      我保存了对包装器($context)的引用,然后从$context中找到了类为“container”的所有div,还保存了对该类的引用

      其次,我没有将click函数绑定到每个链接,而是在单击上下文中的链接时将click事件委托给$context(1个事件绑定,而不是20个)