Если я правильно понял, вы хотите, чтобы поповер закрывался, когда пользователь щелкает практически везде, кроме внутренней части самого поповера, за исключением кнопки фактического закрытия. Это может быть выполнено с помощью прослушивателя событий:
$('html').click(function() {
if(!$(event.target).is('#foo')) {
// Code to hide/remove popovers
}
});
Проверьте этот plunkr .
Или, в вашем конкретном сценарии:
$('html').click(function() {
if(!$(event.target).is('.my-popover-class')) {
vm.togglePopover = false;
}
})
Где целые числа capacity
и numItems
- это вместимость вашего ящика (53 в примере) и общее количество элементов. у вас есть два следующих вычисления:
int numBoxes = numItems / capacity;
int remainder = numItems % capacity;
Это даст вам количество заполненных полей ( numBoxes
) и количество элементов в дополнительном поле ( остаток
), если таковые необходимы, поскольку это значение может быть 0.
Изменить: как Люк указал в комментариях, вы можете получить тот же результат с помощью функции библиотеки классов .NET Math.DivRem .
int remainder;
int numBoxes = Math.DivRem( numItems, capacity, out remainder );
Эта функция возвращает частное, а остаток помещает в выходной параметр.
простой, чрезмерно императивный пример:
int itemsPerBox = 53;
int totalItems = 56;
int remainder = 0;
int boxes = Math.DivRem(totalItems, itemsPerBox, out remainder);
for(int i = 0; i <= boxes; i++){
int itemsincurrentbox = i == boxes ? remainder : itemsPerBox;
}
Используйте оператор модуля, чтобы определить остаток. Быстрый пример:
int totalBoxes = Math.Ceiling(Convert.ToDecimal(intFeet / 53));
List<int> boxes = new List<int>();
for (int i=0; i< totalBoxes; i++)
{
if (i == totalBoxes-1)
boxes.Add(intFeet % 53)
else
boxes.Add(53);
}
Если я правильно понимаю вопрос, все поля, кроме последнего, будут содержать 53 элемента, а последний box будет содержать intFeet% 53 (intFeet mod 53 или остаток после деления intFeet и 53).
Однако цикл не нужен для ответа на ваш вопрос;
int totalItems = 56;
int boxes = Math.Ceiling(Convert.ToDecimal(totalItems / 53)) + 1;
for(int i=0; i< boxes;i++)
{
int numberInBoxes = i != boxes -1 ? 53 : totalItems % 53;
}
Все поля, кроме последнего, будут содержать 53 элемента. Что касается вычисления количества полных ящиков и количества элементов в последнем поле, найдите целочисленное деление и модуль.