|
1 | 1 | /*
|
2 |
| - * jQuery Form Styler v1.6.1 |
| 2 | + * jQuery Form Styler v1.6.2 |
3 | 3 | * https://github.com/Dimox/jQueryFormStyler
|
4 | 4 | *
|
5 | 5 | * Copyright 2012-2014 Dimox (http://dimox.name/)
|
6 | 6 | * Released under the MIT license.
|
7 | 7 | *
|
8 |
| - * Date: 2014.11.23 |
| 8 | + * Date: 2015.02.21 |
9 | 9 | *
|
10 | 10 | */
|
11 | 11 |
|
|
44 | 44 | return this.each(function() {
|
45 | 45 | var el = $(this);
|
46 | 46 |
|
| 47 | + var iOS = (navigator.userAgent.match(/(iPad|iPhone|iPod)/i) && !navigator.userAgent.match(/(Windows\sPhone)/i)) ? true : false; |
| 48 | + var Android = (navigator.userAgent.match(/Android/i) && !navigator.userAgent.match(/(Windows\sPhone)/i)) ? true : false; |
| 49 | + |
47 | 50 | function Attributes() {
|
48 | 51 | var id = '',
|
49 | 52 | title = '',
|
|
502 | 505 |
|
503 | 506 | // если iOS, то не показываем выпадающий список,
|
504 | 507 | // т.к. отображается нативный и неизвестно, как его спрятать
|
505 |
| - var iOS = navigator.userAgent.match(/(iPad|iPhone|iPod)/i) ? true : false; |
506 | 508 | if (iOS) return;
|
507 | 509 |
|
508 | 510 | // умное позиционирование
|
|
564 | 566 | selectbox.removeClass('dropup').addClass('dropdown');
|
565 | 567 | }
|
566 | 568 | }
|
| 569 | + |
| 570 | + // если выпадающий список выходит за правый край окна браузера, |
| 571 | + // то меняем позиционирование с левого на правое |
| 572 | + if (selectbox.offset().left + dropdown.outerWidth() > win.width()) { |
| 573 | + dropdown.css({left: 'auto', right: 0}); |
| 574 | + } |
567 | 575 | // конец умного позиционирования
|
568 | 576 |
|
569 | 577 | $('div.jqselect').css({zIndex: (singleSelectzIndex - 1)}).removeClass('opened');
|
|
610 | 618 |
|
611 | 619 | // прокручиваем до выбранного пункта при открытии списка
|
612 | 620 | if (li.filter('.selected').length) {
|
613 |
| - // если нечетное количество видимых пунктов, |
614 |
| - // то высоту пункта делим пополам для последующего расчета |
615 |
| - if ( (ul.innerHeight() / liHeight) % 2 !== 0 ) liHeight = liHeight / 2; |
616 |
| - ul.scrollTop(ul.scrollTop() + li.filter('.selected').position().top - ul.innerHeight() / 2 + liHeight); |
| 621 | + if (el.val() === '') { |
| 622 | + ul.scrollTop(0); |
| 623 | + } else { |
| 624 | + // если нечетное количество видимых пунктов, |
| 625 | + // то высоту пункта делим пополам для последующего расчета |
| 626 | + if ( (ul.innerHeight() / liHeight) % 2 !== 0 ) liHeight = liHeight / 2; |
| 627 | + ul.scrollTop(ul.scrollTop() + li.filter('.selected').position().top - ul.innerHeight() / 2 + liHeight); |
| 628 | + } |
617 | 629 | }
|
618 | 630 |
|
619 | 631 | preventScrolling(ul);
|
|
679 | 691 | // изменение селекта с клавиатуры
|
680 | 692 | .on('keydown.styler keyup.styler', function(e) {
|
681 | 693 | var liHeight = li.data('li-height');
|
682 |
| - divText.text(option.filter(':selected').text()); |
| 694 | + if (el.val() === '') { |
| 695 | + divText.text(selectPlaceholder).addClass('placeholder'); |
| 696 | + } else { |
| 697 | + divText.text(option.filter(':selected').text()); |
| 698 | + } |
683 | 699 | li.removeClass('selected sel').not('.optgroup').eq(el[0].selectedIndex).addClass('selected sel');
|
684 | 700 | // вверх, влево, Page Up, Home
|
685 | 701 | if (e.which == 38 || e.which == 37 || e.which == 33 || e.which == 36) {
|
686 |
| - ul.scrollTop(ul.scrollTop() + li.filter('.selected').position().top); |
| 702 | + if (el.val() === '') { |
| 703 | + ul.scrollTop(0); |
| 704 | + } else { |
| 705 | + ul.scrollTop(ul.scrollTop() + li.filter('.selected').position().top); |
| 706 | + } |
687 | 707 | }
|
688 | 708 | // вниз, вправо, Page Down, End
|
689 | 709 | if (e.which == 40 || e.which == 39 || e.which == 34 || e.which == 35) {
|
|
873 | 893 | // если Android или iOS, то мультиселект не стилизуем
|
874 | 894 | // причина для Android - в стилизованном селекте нет возможности выбрать несколько пунктов
|
875 | 895 | // причина для iOS - в стилизованном селекте неправильно отображаются выбранные пункты
|
876 |
| - var Android = navigator.userAgent.match(/Android/i) ? true : false; |
877 |
| - var iOS = navigator.userAgent.match(/(iPad|iPhone|iPod)/i) ? true : false; |
878 | 896 | if (Android || iOS) return;
|
879 | 897 |
|
880 | 898 | doMultipleSelect();
|
|
0 commit comments