Форум программистов, компьютерный форум, киберфорум
JavaScript
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.96/55: Рейтинг темы: голосов - 55, средняя оценка - 4.96
0 / 0 / 0
Регистрация: 14.12.2011
Сообщений: 120

Как подружить два одинаковых js скрипта на одной странице?

26.08.2014, 05:01. Показов 10770. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Суть проблемы: нужно создать на JS систему оповещений о личных сообщениях. Нашёл в Интернете соотв. JS код вывода сообщений, скопипастил, всё работает. Но сообщений два вида - от администрации и от других юзеров, следовательно, реакция на нажатие кнопок тоже разная. В одном скрипте нельзя сделать по некоторой причине. Сделал 2 одинаковых скрипта : один - сообщения администрации, второй - юзеров, подключил к одной странице. Но когда должен сработать ТОЛЬКО второй скрипт, ВМЕСТО него работает только который подключён первым. Пробовал оба скрипта через noConflict - тоже только один работает, но на этот раз второй а не первый. Подскажите, что именно тут нужно сделать уникальным, что вообще делать?
Я кодил на PHP, а в JS я новичок, сейчас нужно просто решить проблему, нет времени на учебники. Что делать?
подключаю к странице так:

PHP
1
2
3
4
5
6
<head>
...........
...........
<script type="text/javascript"  src='/message/monitor1.js'></script> 
<<script type="text/javascript" src='/message/monitor2.js'></script>
</head>
Выкладываю код одного из скриптов-близнецов, второй отличается только в обработчиках кнопок и тексте окна диалога:
JavaScript
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
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
setInterval('monitor();', 5*1000);
function monitor(){
//ЗДЕСЬ В АЯКСЕ ЗАПРАШИВАЕМ PHP СТРАНИЦУ, И ПОЛУЧАЕМ ОТ НЕЁ ЧЕРЕЗ JSON ПЕРЕМЕННУЮ funcflag
..........
  if(funcflag=='message_admin'){//ОПРЕДЕЛЯЕМ ОТ ЮЗЕРА СООБЩЕНИЕ ИЛИ ОТ АДМИНИСТРАЦИИ.
     window.dialogs.confirm.show()}//ВЫВОДИМ СОБСТВЕННО ДИАЛОГ
 
  else {throw "stop";} // ПРОБОВАЛ НАСИЛЬНО ОСТАНАВЛИВАТЬ ПЕРВЫЙ СКРИПТ, КОГДА ДОЛЖЕН РАБОТАТЬ ВТОРОЙ 
}
 
//////////////////////////////
//НАЧАЛО ЧУЖОГО КОДА            
//////////////////////////////
(function (parentObject) {
    if (parentObject.dialogs)
        return;
    //////////////
    
    ////////////////////////////////////////////////
    // Создаем общий интерфейс для создания диалога
    ////////////////////////////////////////////////
    parentObject.dialogs = {
        form: function ( _class, _innerHtml, _dialogOptions) {
            var dialog = {},
                /* уникальный класс для возможности по селектору найти нужное окно */
                className = 'custom-dialog-' + Math.round(Math.random() * 100000),
                /* объединяем дефолтные параметры с пользовательскими _dialogOptions */
                dialogOptions = $.extend(true, {
                    autoOpen: false,
                    modal: true,
                    height: 150,
                    width: 400,
                    resizable: false
                }, _dialogOptions || {}),
                /* диалог, в котором будет создано всплывающее окно */
                dialogHtml = $('<div id="countdown"/>');//ID дива ДОБАВИЛ Я, НЕ ПОМОГЛО
 
            /* добавляем div в тело документа */
            $('body').append(dialogHtml);
            /* присваиваем уникальный класс */
            dialog.uniqClassName = className;
            /* добавляем уникальный класс */
            dialogHtml.addClass(className);
            
            /* создаем всплывающее окно */
            dialog.jDialog = $(dialogHtml).dialog(dialogOptions);
 
            /* если задан пользовательский класс, то добавляем в общее окно */
            if (_class)
                dialog.jDialog.addClass(_class);
 
            /* Удаляем стандартную шапку класса */
            dialog.jDialog.parent().find('.ui-dialog-titlebar').remove();
 
            /* заполняем содержимое html шаблоном окна */
            dialog.jDialog.append(_innerHtml);
 
            return dialog;
        }
    }
    
    // Формируем диалоги 
    $(document).ready(function () {
       
        ////////////////////////////////////////////////
        // Окно подтверждения
        ////////////////////////////////////////////////                
 
        /* Создаем окно подтверждения */
        
        
            var str=('<div class="custom-dialog-confirm-container">' +
                    '<div class="custom-dialog-confirm-container-title">' +
                    '</div>' +
                    '<div class="custom-dialog-confirm-container-text">' +
                    '</div>' +
                    '<div class="custom-dialog-confirm-container-btn-container">' +
                        '<button type="button" class="custom-button-cancel">Позже</button>' +
                        '<button type="button" class="custom-button-apply">Связаться с администрацией</button>' +
                    '</div>' +
                '</div>');
 
 
parentObject.dialogs.confirm
        = parentObject.dialogs
            .form('custom-dialog-confirm',str);
 
        /* Определяем функцию показа */
parentObject.dialogs.confirm.show = function (title, msg, onHide, onApply) {
 
 
            var self = this;
            // Если есть обработчик на закрытие, то добавляем его
            if (typeof (onHide) === 'function') {
                hideFunc = function () {
                    self.jDialog.off('dialogclose', hideFunc);
                    delete hideFunc;
                    hideFunc = null;
                    onHide();
                };
 
                self.jDialog.on('dialogclose', hideFunc);
            };
 
            // Удаляем предыдущий обработчик подтверждения
            self.jDialog.find('.custom-button-apply').unbind('click');
            self.jDialog.find('.custom-button-apply').click(function () {
                self.jDialog.dialog('close');
                
                    /// ВЫВОДИМ АЛЕРТ
                alert('Вы будете перенаправлены к администрации');
 
                if (typeof (onApply) === 'function')
                    onApply();
            });
 
            // Вставляем заголовок и текст окна
            self.jDialog.find('.custom-dialog-confirm-container-title').html(title ? title : 'Подтверждение');
            self.jDialog.find('.custom-dialog-confirm-container-text').html(msg ? msg : 'Вы действительно хотите выполнить данную операцию?');
 
            self.jDialog.dialog('open');
       
 
        /* Определяем функцию скрытия */
        parentObject.dialogs.confirm.hide = function () {
            
            var self = this;
            self.jDialog.dialog('close');
        };
 
        /* Определяем обработчик для кнопки Отмена */
        self.jDialog.find('.custom-button-cancel').unbind('click');
        //УДАЛЯЕМ ПРЕДЫДУЩИЙ ОБРАБОТЧИК (ЧТОБЫ НЕ БЫЛО ПОВТОРНОГО АЛЕРТА)
        parentObject.dialogs.confirm.jDialog.find('.custom-button-cancel').click(function () {
                    /////////////ЮЗЕР НАЖАЛ КНОПКУ ОТМЕНА, 
                    
            parentObject.dialogs.confirm.hide();
        });
}//конец блока функции confirm.show
});//конец функции document ready
})(window);//конец функции parent object
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
26.08.2014, 05:01
Ответы с готовыми решениями:

Как вставить два одинаковых скрипта на одной странице
Как вставить два одинаковых скрипта на одной странице, чтобы они оба работали: Пример скриптов: 1) &lt;a href=&quot;АДРЕС ...

Два одинаковых скрипта на одной странице
Здравствуйте. Как разместить два одинаковых скрипта на одной странице, чтобы они оба работали: Пример скрипта: 1) &lt;a...

Не работают два JS скрипта на одной странице
Токая проблема Не хотят работать два JS скрипта на странице галерея картинок и аккордеон Если убрать вызов одного скрипта то другой...

14
супермизантроп
Эксперт JS
3941 / 2979 / 692
Регистрация: 18.04.2012
Сообщений: 8,629
26.08.2014, 06:20
нужен код второго скрипта, кто ж знает - что вы имеете в виду под словом "близнец"?
0
Эксперт JSЭксперт HTML/CSS
2436 / 1115 / 312
Регистрация: 23.06.2011
Сообщений: 3,529
26.08.2014, 06:27
Цитата Сообщение от kalabuni Посмотреть сообщение
что вы имеете в виду под словом "близнец"?
функции с одинаковыми именами, одинаковые переменные, были бы они разными, "своя" бы и срабатывала, не?
0
Модератор
 Аватар для Thisman
771 / 352 / 142
Регистрация: 17.07.2013
Сообщений: 992
26.08.2014, 07:36
Никита-2012, не весь код конечно глянул, но суть как я понял такая вот:
Все хранится в свойстве dialogs объекта window
Функция самовызывающаяся, поэтому создается все сразу, далее в самом начале есть строчки:

JavaScript
1
if (parentObject.dialogs) return;
Что намекает, на то, что если уже существует dialogs , то перезаписываться он не будет. А значит второй "близнец" не создается, что скорее всего вызывает проблемы
1
 Аватар для fol
511 / 485 / 161
Регистрация: 08.07.2013
Сообщений: 1,714
Записей в блоге: 1
26.08.2014, 10:51
я баловался со скриптом обратного звонка, ставил 2 одинаковых. просто во втором переименовал все, добавив символ
1
Модератор
 Аватар для Thisman
771 / 352 / 142
Регистрация: 17.07.2013
Сообщений: 992
26.08.2014, 11:43
Никита-2012,
Это то же самое, что делать:

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
var parentObj = {}; // наш "глобальный объект"
// Первый из близнецов,который создает в объекте свойство с тектстом
var init = function(pO,message) {
    if(pO.message) return;
    pO.message = message;
}(parentObj,"Это первый скрипт")
 
// Второй близнец, где отличается только текст сообщения,все остальное одинаково
var init2 = function(pO,message) {
    if(pO.message) return;
    pO.message = message;
}(parentObj,"Это сообщение на запишется")
 
parentObj.message // "Это первый скрипт"
Вариант решения, создать один глобальный объект window.dialogs, который будет хранить в себе уже два объекта fromUser и fromAdmin, но при этом придется перелопатить весь код, где используется эти методы, что бы переделать
2
0 / 0 / 0
Регистрация: 14.12.2011
Сообщений: 120
27.08.2014, 00:35  [ТС]
Thisman
Закомментировал return, теперь работает только второй скрипт, даже когда должен работать первый.
Честно говоря, нихренашечки я в вашем коде не понял...
У меня практически нулевые познания в JS. Вот в дельфи или PHP чётко понятно где переменная, где функция, где метод. А JS сложный какой-то.
Если можно как-то объяснить для чайника, скажите плиз, какие конкретно функции переименовать, какие конкретно переменные объявить локальными, чтобы не происходило "скрещивания".

Добавлено через 11 минут
я баловался со скриптом обратного звонка, ставил 2 одинаковых. просто во втором переименовал все, добавив символ
Скажите, а что именно (конкретно) нужно переименовать в моём скрипте?

Добавлено через 2 часа 11 минут
Есть кто живой?)
Блин, переименовал всё что можно, ничего не помогает.
0
супермизантроп
Эксперт JS
3941 / 2979 / 692
Регистрация: 18.04.2012
Сообщений: 8,629
27.08.2014, 07:34
постарайтесь понять, что на странице работает ОДИН скрипт
разные части этого одного единого скрипта вы можете подключить разными способами (несколько подключаемых js-файлов + несколько блоков <script>js-код</script>), но это будет всё-равно ОДИН и ЕДИНЫЙ скрипт страницы

а на странице в этом едином скрипте может быть только одна функция с именем monitor и только один объект с именем jDialog

если у вас будет два определения функции monitor, то исполняться будет более поздний её вариант
0
Модератор
 Аватар для Thisman
771 / 352 / 142
Регистрация: 17.07.2013
Сообщений: 992
27.08.2014, 07:45
Цитата Сообщение от kalabuni Посмотреть сообщение
только одна функция с именем monitor
Тут главное что бы область видимости была разная:

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function Monitor() {
   console.log("THIS IS FIRST MONITOR");
}
 
Monitor(); // THIS IS FIRST MONITOR
 
(function () {
   function Monitor() {
       console.log("THIS IS ANOTHER MONITOR");
   }
 
   // Тут у нас свой Monitor!
   Monitor() // THIS IS ANOTHER MONITOR
})();
 
Monitor() // THIS IS FIRST MONITOR,  ничего не перезаписано
0
супермизантроп
Эксперт JS
3941 / 2979 / 692
Регистрация: 18.04.2012
Сообщений: 8,629
27.08.2014, 07:50
Thisman, вы это мне?

спасибо, но это я знаю

если вы топикстартеру, то пожалейте его, не запутывайте окончательно, он же честно написал, что у него "практически нулевые познания в JS"
0
0 / 0 / 0
Регистрация: 14.12.2011
Сообщений: 120
27.08.2014, 23:18  [ТС]
решил переименованием
0
 Аватар для alexsamos33
669 / 640 / 335
Регистрация: 26.04.2014
Сообщений: 2,122
28.08.2014, 22:05
Цитата Сообщение от Thisman Посмотреть сообщение
Тут главное что бы область видимости была разная:

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function Monitor() {
   console.log("THIS IS FIRST MONITOR");
}
 
Monitor(); // THIS IS FIRST MONITOR
 
(function () {
   function Monitor() {
       console.log("THIS IS ANOTHER MONITOR");
   }
 
   // Тут у нас свой Monitor!
   Monitor() // THIS IS ANOTHER MONITOR
})();
 
Monitor() // THIS IS FIRST MONITOR,  ничего не перезаписано
В дополнении к этому:
JavaScript
1
2
3
4
5
6
7
8
9
10
11
var Monitor = {
"first" : function() {
   console.log("THIS IS FIRST MONITOR");
},
"second" : function() {
   console.log("THIS IS Second MONITOR");
}
};
 
Monitor.first(); // THIS IS First MONITOR
Monitor.second(); // THIS IS Second MONITOR
0
0 / 0 / 0
Регистрация: 14.12.2011
Сообщений: 120
24.12.2015, 02:48  [ТС]
Если у кого такая же проблема возникнет - просто переименуйте как угодно все функции и все переменные в одном из скриптов чтобы они с одинаковыми именами не были. Например вместо var нужно var1. Простое решение.
0
Эксперт JSЭксперт HTML/CSS
2436 / 1115 / 312
Регистрация: 23.06.2011
Сообщений: 3,529
25.12.2015, 07:37
Цитата Сообщение от Никита-2012 Посмотреть сообщение
Например вместо var нужно var1.
Неудачный пример, var не нужно переименовывать, если это действительно var.
0
0 / 0 / 0
Регистрация: 14.12.2011
Сообщений: 120
26.12.2015, 18:24  [ТС]
Цитата Сообщение от newJS Посмотреть сообщение
Неудачный пример, var не нужно переименовывать, если это действительно var.
Да, неудачный пример, var - это зарезервированное слово

Например так: peremennaya переименовываем как peremennaya1
а myfunction переименовываем как myfunction1

И так делаем со всеми переменными и функциями в одном из скриптов.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
26.12.2015, 18:24
Помогаю со студенческими работами здесь

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

Два шлюза в одной сети. Как подружить
Добрый день господа. Имею в сети 2 шлюза. 1 Active Directory на нём же WINS и DHCP, Стоит в сети (192.168.12.*) два...

Как сделать на colorbox два независимых слайдера на одной странице?
На странице есть слайдер, работающий на плагине сolorbox и 2 набора фоток: в &lt;div class=&quot;photo&quot;&gt; и в &lt;div...

Исполнение скрипта на одной странице
Уважаемые подскажите, как сделать подобное: Обратился к файлу index.php 1) В нем выводится форма, логин, пароль, и кнопка отправить....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru