2016-07-07 136 views
2

我做了一个函数,当你点击它时选择一个项目。当我选择超过10个时,它会停止添加到selectedItemsjQuery点击切换事件

但是,当选择10个项目时,我仍然可以通过单击切换类d-items-selected。我该如何禁用?我试过使用stop(),但是取消了这个洞,所以我不能再次“取消”这些项目。

$(document).ready(function(){ 
     $('.d-items').on('click', function(e){ 
      e.preventDefault(); 
      $(this).toggleClass('d-items-selected'); 
      var selectedItems = $('.d-items-selected').length; 
      if(selectedItems > 10) { 
       $('.d-items').finish(); 
      } else { 
       $('#ItemsSelected').html(selectedItems); 
      } 
     }); 
    }); 
+0

你为什么不举动切换if语句里面FN? –

+0

偏离这个问题,但我正在回应你的现在删除的问题:@zerovacpls正如我前面所说的最有可能未被销毁的会话数组('session_destroy();')并保持它缓存/同一会话。如果你销毁会话数组并重试,我敢打赌它会起作用。我以前见过这种情况。你还应该在头后添加'exit;',因为你的代码可能想继续执行下去。您还需要检查会话是否在使用这些(会话)的所有其他文件中启动。这甚至可能是一个缓存问题。 –

+0

......你从未说过你为什么删除了你的问题,如果你确实发现了问题;是我提到的会议阵列仍然在内存中吗?这是为你删除的问题http://stackoverflow.com/q/39558222/ - 这是一个“需要知道”的问题。 –

回答

2

您可以禁用未选中的控件。像这样的东西。

$(document).ready(function(){ 
     $('.d-items').on('click', function(e){ 
      e.preventDefault(); 
      $(this).toggleClass('d-items-selected'); 
      var selectedItems = $('.d-items-selected').length; 
      if(selectedItems > 10) { 
       //do not allow to select 
       $(this).removeClass('d-items-selected'); 
      } else { 
       $('#ItemsSelected').html(selectedItems); 
      } 
     }); 
    }); 
+0

对不起,但这可以选择超过10个项目+它只有9个,当我选择其中的10个 –

+0

谢谢在先进! –

0

会解除您的点击事件工作吗?

例如

if(selectedItems > 10) { 
    $('.d-items').unbind("click"); 
} 

否则,您可以selectedItems > 10后重新绑定到不同的功能,或任何真的。

编辑:如果你澄清正是你想要selectedItems > 10

+0

没什么。当你已经选择了10个项目时,你不应该选择更多。但仍然可以取消选择一个项目 –

0

我试过后点击会怎么样这将有助于想出了一个解决方案:

$(function() { 
    $('.d-items').on('click', function(e) { 
    e.preventDefault(); 
    var selectedItems = $('.d-items-selected').length; 

    //if selected items are less then 10 
    // or the current item is already selected you can deselect 
    if (selectedItems<10 || (selectedItems>=10 && $(this).is('.d-items-selected'))) { 
     $(this).toggleClass('d-items-selected'); 
    } 
    if (selectedItems > 10) { 
     $('.d-items').finish(); 
    } else { 
     $('#ItemsSelected').html(selectedItems); 
    } 
    }); 
}); 
+0

当我现在选择一个项目时,它表示'0',然后当我取消选择时,它表示选择了1个项目。 –

+0

我的项目不是复选框。它看起来像这样:https://gyazo.com/dc50220519aca321a2aace14036e7d8b 所以我不明白你的建议。 –

+0

@zerovacpls你可以重试并让我知道吗?谢谢 – gaetanoM

0

也许尝试 e.stopPropagation( )或 e.stopImmediatePropagation()

0
$(document).ready(function(){ 
      var i=0; 
      $('.d-items').on('click', function(e){ 
       e.preventDefault(); 

       if($(this).hasClass('d-items-selected')) { 
        $(this).removeClass('d-items-selected'); 
        i--; 
        console.log("deleted"+i); 
       } 
       else { 
        if(i<10) { 
         $(this).addClass('d-items-selected'); 
         i++; 
         console.log("added"+i); 
        } 
       } 
      }) 
}); 
+0

尽管此代码可能会回答问题,但提供有关如何解决问题和/或为何解决问题的其他上下文会提高答案的长期价值。 – HiDeo