Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Интернет » Web-программирование » вопросы по javascript

Модерирует : Cheery

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116

Открыть новую тему     Написать ответ в эту тему

Weinaum



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii
спасибо, все работает, до того самого момента, как только я вместо some ajax code пытаюсь выполнить реальную функцию. Если qty > 0, аякс обновление корзины срабатывает только 1 раз, после этого на клики по + - либо же ручное изменение инпута не реагирует никак, только новая перезагрузка страницы. При этом в консоле никаких ошибок нет, с чем это связано, не пойму...
Получается, что либо работает как надо аякс, либо вывод сообщения об ошибке...
 

Всего записей: 2152 | Зарегистр. 18-06-2006 | Отправлено: 13:59 16-12-2020
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Weinaum
Переписывать обработчик событий, цеплять к неизменяемому родителю.
В примере, что показал, будет
$('body").on('click', '.product .и_уже_конкретнее', function() {
...
}
Тогда он не будет удален при изменении DOM

Всего записей: 15100 | Зарегистр. 20-09-2014 | Отправлено: 15:47 16-12-2020
Weinaum



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii
да, спасибо, вот сейчас разобрался только, пришлось дописывать вывод ошибки в код перед обработкой аякса, вроде пошло все..
 
Добавлено:
Mavrikii
 
еще один вопрос, другая совсем проблема, но не могу понять.  
При обработке одного события возникает конфликт, что приводит к ошибке  

Код:
Uncaught TypeError: f[b] is not a function

После того, как добавил в код jQuery.noConflict(), ошибка и конфликт исчезли, во всех браузерах событие обрабатывается правильно, кроме firefox.  
Это проблема/особенность лисы или в чем может быть дело?

Всего записей: 2152 | Зарегистр. 18-06-2006 | Отправлено: 16:10 16-12-2020 | Исправлено: Weinaum, 16:17 16-12-2020
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Weinaum

Цитата:
как добавил в код jQuery.noConflict()

для использования этого нужно переписывать код без $ или обернуть все в функцию, передав ей jQuery как $ аргумент.
проблема с перекрытием с bootstrap библиотекой, чаще с модальными диалогами.
https://magento.stackexchange.com/questions/228525/magento-2-2-2-bootstrap-min-js7-uncaught-typeerror-fb-is-not-a-function
https://www.infinetsoft.com/Post/JQuery-error-Uncaught-TypeError-f-b-is-not-a-function/2477
либо какая то из ее функций вызывается неправильно - не могу сказать не видя работающего кода.

Всего записей: 15100 | Зарегистр. 20-09-2014 | Отправлено: 20:41 16-12-2020 | Исправлено: Mavrikii, 20:42 16-12-2020
Weinaum



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii
да, спасибо, это я знаю - именно с bootstrap, и где то на magento.stackexchange.com и нашлось решение с noConflict - на самом деле там все с $ и $.noConflict() - просто когда писал предыдущий пост скопировал как есть.  
Проблема именно с лисой, вот например страница с проблемой - модаль попап по клику на Versandkosteninfo(после цены и перед Auf lager и большой синей кнопкой в корзину.  
В хроме, Edge работает нормально, единственное, там выставлен таймаут в 3сек после загрузки страницы, там есть необходимость сделать этот таймаут, но в любом случае, через таймаут скрипт срабатывает. В фф - нет.  

Всего записей: 2152 | Зарегистр. 18-06-2006 | Отправлено: 21:46 16-12-2020
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Weinaum

Цитата:
модаль попап по клик

в консоли нет сообщений об ошибке.
 

Цитата:
там есть необходимость сделать этот таймаут

ее нет, значит что то делаете не так. я так понимаю потому, что кнопки модальные активны до загрузки остального (выдается сообщение об ошибке тогда, если сразу кликать после загрузки).

Цитата:
Uncaught Error: cannot call methods on modal prior to initialization; attempted to call method 'openModal'

и проблема именно в этом, но это не решение, так как задержка для ожидания загрузки зависит от мощности компа, скорости соединения и многих вещей.
 
увеличьте задержку и проверьте, но в принципе код лучше писать без нее.

Всего записей: 15100 | Зарегистр. 20-09-2014 | Отправлено: 21:54 16-12-2020 | Исправлено: Mavrikii, 22:01 16-12-2020
Weinaum



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii

Цитата:
в консоли нет сообщений об ошибке.

Вчера была в firefox именно f[b] is not a function - сегодня ошибки нет, мистика прямо...ну да ладно, понаблюдаю пока.  
 
По поводу таймаута - там один скрипт используется в нескольких случаях,в одном из этих случаев без таймаута не обойтись. Вернее, пока не найдено решение, позволяющее обойтись в этом случае без таймаута.  
Т.е. сейчас или дублировать скрипты, один с таймаутом один без - или же подключать один скрипт для всех случаев. Согласен, не лучший вариант. Ну как бы не столь критично, вряд ли пользователь моментально открыв страницу пойдет кликать именно на эту информацию.  

Всего записей: 2152 | Зарегистр. 18-06-2006 | Отправлено: 09:48 17-12-2020
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Weinaum

Цитата:
в одном из этих случаев без таймаута не обойтись

думаю, что можно. если вы просто методом тыка вставили таймаут и оно заработало - это неправильно.

Всего записей: 15100 | Зарегистр. 20-09-2014 | Отправлено: 09:57 17-12-2020
Weinaum



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
думаю, что можно. если вы просто методом тыка вставили таймаут и оно заработало - это неправильно

я знаю что неправильно, но это временное решение, пока не реализовано лучшее. Ну и как бы нет, не методом тыка.
пс. попробуйте пож-ста еще раз ту же ссылку открыть в приватном окне firefox - если не перезагружать страницу, появляется ли в консоли ошибка f[b] is not a function - у меня появляется...

Всего записей: 2152 | Зарегистр. 18-06-2006 | Отправлено: 14:30 17-12-2020 | Исправлено: Weinaum, 14:37 17-12-2020
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Weinaum

Цитата:
еще раз ту же ссылку


Цитата:
404 Not Found
nginx/1.14.0 (Ubuntu)


Цитата:
Service Temporarily Unavailable
 
The server is temporarily unable to service your request due to maintenance downtime or capacity problems. Please try again later.

 
Добавлено:
Ваша проблема в том, что у вас идет 303 запроса к серверу при загрузке страницы.
Не многовато ли?
 
А ошибка как раз инициируется из вашего таймаута, он же?
И, как понимаю, чтобы "решить" проблему с  

Цитата:
Uncaught Error: cannot call methods on modal prior to initialization; attempted to call method 'openModal'

 

Код:
 /* A.N - add timeout for use in ui_components (recently viewed etc.) */
            setTimeout(function(){
                var popup = modal(options, $('#popup-modal-shipping-costs-info'));
                $(".click-shipping-costs-info").on('click',function(){  
                    $("#popup-modal-shipping-costs-info").modal("openModal");
                });
            }, 3000)

 
Версия jQuery - 1.12.4, bootstrap - 3.3.5
https://bootstrapdocs.com/v3.3.5/docs/javascript/#modals

Цитата:
.modal('show')

откуда у вас там "openModal" пока неизвестно, по умолчанию его нет. процитированная ошибка до куска кода выше говорит как раз о том, что не может вызвать нестандартные методы объекта .modal, так как по умолчанию, как и написал, отображение диалога идет через "show". и требует предварительную инициализацию .modal.
 
попробуйте так, без таймаута и  

Цитата:
var popup = modal(options, $('#popup-modal-shipping-costs-info'));

 

Код:
$("#popup-modal-shipping-costs-info").modal(options).modal("openModal");

хотя, в принципе, это почти одно и то же.
 
плюс можно попробовать использовать стандартный "show", надо глянуть что делает метод openModal.
 
глянул, ясно.. грузится в modal.min.js

Код:
            this._on(this.element, {
                'openModal': this.openModal,
                'closeModal': this.closeModal
            });

первое сообщение возникает в случае клика до момента загрузки этого файла.
и проблема второй ошибки с f[b], похоже, потому что у вас конфликт между .modal родным у bootstrap и тем, что создается как .widget используя jQuery UI.

Цитата:
$.widget('mage.modal'

создает .modal в именном пространстве "mage". когда вы вызываете .modal, то сообщение об ошибке f[b] идет если обрабатывается бутстраповский попап, а не ваш виджет.
 

Цитата:
var bootstrapButton = $.fn.button.noConflict() // return $.fn.button to previously assigned value
$.fn.bootstrapBtn = bootstrapButton            // give $().bootstrapBtn the Bootstrap functionality

если вы используете .modal от бутстрап, но не часто, то можно аналогично переделать для избежания конфликта.
 
либо переделывайте по клику вызов с использованием именного пространства, в данном случае будет

Код:
$.mage.modal("openModal", $("#popup-modal-shipping-costs-info"));

 
это может привести к ошибке аналогичной с прединициализацией, тогда

Код:
$.widget.bridge("mage_modal", $.mage.modal);

и использовать как

Код:
$("#popup-modal-shipping-costs-info").mage_modal("openModal");

Всего записей: 15100 | Зарегистр. 20-09-2014 | Отправлено: 22:17 17-12-2020 | Исправлено: Mavrikii, 00:17 18-12-2020
WONDROUS



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскажите, пожалуйста, как в данном примере лучше и правильнее сделать так, чтобы при скроллинге гирлянда оставалась наверху? В общем-то, то, что сейчас на странице, работает, но как-то нет аккуратности и видно, как прячется оригинал. И ещё, надо без привязки к высоте элементов, которые будут сверху или снизу гирлянды.

Всего записей: 3346 | Зарегистр. 30-06-2002 | Отправлено: 00:50 18-12-2020
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
WONDROUS

Цитата:
И ещё, надо без привязки к высоте элементов, которые будут сверху или снизу гирлянды

некоторых особенностей не избежать. так как при position: fixed вы сдвигаете все, что ниже, поэтому нужно имитировать его расположение на месте. по этой же причине нельзя цепляться только к положению плавающего элемента, так как при обратном скроллинге будет непонятно когда его возвращать обратно. но можно сделать так
https://jsfiddle.net/1okv9yt3/
если у верхнего элемента уже есть margin-bottom, то нужно слегка изменить через += и -=
можно не менять margin у верхнего элемента, а изменить margin-top у нижнего, либо вставить пустой элемент с высотой аналогичной закрепляемому и отображать его когда нужно.

Всего записей: 15100 | Зарегистр. 20-09-2014 | Отправлено: 01:19 18-12-2020 | Исправлено: Mavrikii, 01:21 18-12-2020
WONDROUS



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii
Спасибо за ответ и пример! Всё бы хорошо, только как быть, если выше гирлянды может быть любой элемент, можно обойтись без указания его названия или класса, или ID?

Всего записей: 3346 | Зарегистр. 30-06-2002 | Отправлено: 01:24 18-12-2020
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
WONDROUS

Цитата:
если выше гирлянды может быть любой элемент, можно обойтись без указания его названия или класса, или ID?


Цитата:
 либо вставить пустой элемент с высотой аналогичной закрепляемому и отображать его когда нужно.

через filler
https://jsfiddle.net/1okv9yt3/1/

Всего записей: 15100 | Зарегистр. 20-09-2014 | Отправлено: 01:30 18-12-2020 | Исправлено: Mavrikii, 01:30 18-12-2020
WONDROUS



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii
Большое спасибо за пример с filler! Сейчас то, что нужно было, чтобы плавно всё работало.

Всего записей: 3346 | Зарегистр. 30-06-2002 | Отправлено: 02:23 18-12-2020
Weinaum



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii

Цитата:
$.mage.modal("openModal", $("#popup-modal-shipping-costs-info"));

спасибо, очень похоже что это сработало, и ошибок нет.

Всего записей: 2152 | Зарегистр. 18-06-2006 | Отправлено: 10:49 18-12-2020
fanmas



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Друзья, поздравляю всех с новым годом! Помогите пожалуйста. Есть два select'а
               $price1<?=$win?>.select2({
            allowClear: false,
            closeOnSelect: true,
            language: 'ru',
            minimumInputLength: 0,
            minimumResultsForSearch: Infinity,
            escapeMarkup: function (markup) { return markup; },
            templateSelection: function  (repo) {
                if(repo.text==undefined) return;
                return '<span>Цена опт: '+repo.text+'</span>';
            }
        }).data('select2');
        
        $price2<?=$win?>.select2({
            allowClear: false,
            closeOnSelect: true,
            language: 'ru',
            minimumInputLength: 0,
            minimumResultsForSearch: Infinity,
            escapeMarkup: function (markup) { return markup; },
            templateSelection: function  (repo) {
                if(repo.text==undefined) return;
                return '<span>Цена розница: '+repo.text+'</span>';
            }
        }).data('select2');
 
<select data-placeholder="Цена розница" class="selector" name="Price[price1]" id="Price1<?=$win?>">
<select data-placeholder="Цена опт" class="selector" name="Price[price2]" id="Price2<?=$win?>">
 
плейсхолдер "Цена розница:" отображается в select, "Цена опт:" не отображается. Почему-то templateSelection не срабатывает. Не могу разобраться.

Всего записей: 62 | Зарегистр. 07-07-2005 | Отправлено: 10:31 02-01-2021
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
fanmas

Цитата:
$price2<?=$win?>


Цитата:
id="Price1<?=$win?>"

показывать нужно конечный сгенерированный в странице вариант
и что, собственно, в селекторе $price1 и $price2

Всего записей: 15100 | Зарегистр. 20-09-2014 | Отправлено: 22:00 02-01-2021 | Исправлено: Mavrikii, 03:06 03-01-2021
fanmas



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
<div class="bur-field">
                            
<select data-placeholder="Цена опт" class="selector select2-hidden-accessible" name="Price[price2]" id="Price20" tabindex="-1" style="" aria-hidden="true">
                                    
<option value="1">Цена опт</option>
<option value="34604">Цена опт2</option>
                                
</select>
<span class="select2 select2-container select2-container--default select2-container--focus" dir="ltr" style="width: 360px;">
<span class="selection">
<span class="select2-selection select2-selection--single" role="combobox" aria-haspopup="true" aria-expanded="false" tabindex="0" aria-labelledby="select2-Price20-container">
<span class="select2-selection__rendered" id="select2-Price20-container" title="Цена опт">Цена опт</span>
<span class="select2-selection__arrow" role="presentation">
<b role="presentation"></b>
</span>
</span>
</span>
 
<span class="dropdown-wrapper" aria-hidden="true"></span>
</span>
</div>
 
Вот html select'а где не работает templateSelection, не работает return
 
Вот часть html где работает templateSelection, работает return '<span>Цена розница: '+repo.text+'</span>';
<span class="select2-selection__rendered" id="select2-Price10-container" title="Цена розница">
<span>Цена розница: Основная цена</span>
</span>
 
В select'ах php код

Всего записей: 62 | Зарегистр. 07-07-2005 | Отправлено: 08:14 03-01-2021
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
fanmas
вот это как в окончательном виде выглядит??

Цитата:
               $price1<?=$win?>.select2({
            allowClear: false,
            closeOnSelect: true,
            language: 'ru',
            minimumInputLength: 0,
            minimumResultsForSearch: Infinity,
            escapeMarkup: function (markup) { return markup; },
            templateSelection: function  (repo) {
                if(repo.text==undefined) return;
                return '<span>Цена опт: '+repo.text+'</span>';
            }
        }).data('select2');
         
        $price2<?=$win?>.select2({
            allowClear: false,
            closeOnSelect: true,
            language: 'ru',
            minimumInputLength: 0,
            minimumResultsForSearch: Infinity,
            escapeMarkup: function (markup) { return markup; },
            templateSelection: function  (repo) {
                if(repo.text==undefined) return;
                return '<span>Цена розница: '+repo.text+'</span>';
            }
        }).data('select2');


Цитата:
плейсхолдер "Цена розница:" отображается в select, "Цена опт:" не отображается.

очевидно, что срабатывает селектор $price2<?=$win?>, но не срабатывает $price1<?=$win?>
вот и нужно смотреть что там.

Всего записей: 15100 | Зарегистр. 20-09-2014 | Отправлено: 08:19 03-01-2021 | Исправлено: Mavrikii, 08:19 03-01-2021
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116

Компьютерный форум Ru.Board » Интернет » Web-программирование » вопросы по javascript


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru