Склонение числительных окончаний
Добрый день! Пытаюсь сделать склонение числительных окончаний в слове "секунды", но у меня не совсем получается. Где у меня ошибка, помогите, пожалуйста. Большое спасибо!
$(document).ready(function() { $('.timer').prepend('<div class="left">Окно можно будет закрыть через <span></span> секунд</div>'); decOfNum(5, ['секунда', 'секунды', 'секунд']); var delay = 1, seconds = 7; $('.left span').text(seconds); $('.pop_up').delay(delay * 1000).fadeIn(800, function() { var int; int = setInterval(function() { if (seconds > 1) { $('.left span').text(seconds - 1); seconds--; } else { $('.left').remove(); $('.pop_up .close').show(); clearInterval(int); } }, 1000); $('.timer').ready(function (declOfNum(number, titles) { cases = [2, 0, 1, 1, 1, 2]; return titles[ (number%100>4 && number%100<20)? 2 : cases[(number%10<5)?number%10:5] ]; }); }); }); jQuery('.close').click(function(e) { e.preventDefault(); jQuery('.pop_up').fadeOut(0); }); <style>.pop_up { display: none; background: red; border: 1px solid red; color: white; } .close { display: none; cursor: pointer; }</style> <div class="pop_up">Я модальное окно <div class="timer"> <div class="close">Закрыть окно</div> </div> </div> |
LADYX, гугл по запросу «plural js» возвращает несколько годных вариантов реализации вашей задумки)
К примеру: // © [url]https://gist.github.com/tomfun/830fa6d8030d16007bbab50a5b21ef97[/url] function getNoun(number, one, two, five) { let n = Math.abs(number); n %= 100; if (n >= 5 && n <= 20) { return five; } n %= 10; if (n === 1) { return one; } if (n >= 2 && n <= 4) { return two; } return five; } |
Nexus,
так вот я и подобрал одну из функций, но где у меня ошибка, и что я делаю неправильно? |
LADYX,
Ошибка наверняка в этом участке кода: $('.timer').ready(function(declOfNum(number, titles) { cases = [2, 0, 1, 1, 1, 2]; return titles[(number % 100 > 4 && number % 100 < 20) ? 2 : cases[(number % 10 < 5) ? number % 10 : 5]]; }); Во-первых, событие «ready» для блока .times не произойдет, пока его самостоятельно не запустишь (не уверен); Во-вторых, тела у обработчика события «ready» нет; В-третьих, у тебя в коде синтаксическая ошибка. Я такого объявления функции/класса в js никогда не видел. Видел такое только в Java, однако в js это, вероятно, не прокатит. |
<script> function plural(arr) { var get = [0,1,2,2,2,0,0,0,0,0]; return function(num) { if( String.prototype.slice.call(num, -2,-1) === '1' ) return arr[0]; num = String.prototype.slice.call(num, -1); return arr[ get[num] ]; } } var sec = plural(['секунд','секунду','секунды']); for(var i=0; i<=31; i++) { document.write('через '+i+' ' + sec(i) + '<br>'); } </script> |
Вот так? Но так не работает. Что делаю не так? прошу прощения за кривые руки
$(document).ready(function() { $('.timer').prepend('<div class="left">Можно будет закрыть через <span></span> секунд</div>'); var seconds = plural(['секунд','секунду','секунды']); var delay = 1, seconds = 7; $('.left span').text(seconds); $('.pop_up').delay(delay * 1000).fadeIn(800, function() { var int; int = setInterval(function() { if (seconds > 1) { $('.left span').text(seconds - 1); seconds--; } else { $('.left').remove(); $('.pop_up .close').show(); clearInterval(int); } }, 1000); }); }); function plural(arr) { var get = [0,1,2,2,2,0,0,0,0,0]; return function(num) { if( String.prototype.slice.call(num, -2,-1) === '1' ) return arr[0]; num = String.prototype.slice.call(num, -1); return arr[ get[num] ]; } } jQuery('.close').click(function(e) { e.preventDefault(); jQuery('.pop_up').fadeOut(0); }); |
Цитата:
|
Ну а как же тогда, я не понимаю. Я ведь наоборот определил переменную, а как же тогда будет выводится результат?
|
Цитата:
<script type='text/javascript'> function test(Sec){ switch (Sec%20) { case 1: return 'секунду'; case 2: case 3: case 4: return 'секунды'; }; return 'секунд'; }; for (var i=0; i<100; i++){ document.write('через '+i+' '+test(i)+'<br />'); }; </script> |
|
Часовой пояс GMT +3, время: 16:17. |