Несколько javascript на одной странице

ЕСТЬ РЕШЕНИЕ ЗАКРЫТО

Конфликт скриптов на одной странице. Как разрешить?

#1 7 августа 2013 в 14:02
Приветствую!

На одной странице имеется код 9 скриптов. По отдельности работают. Все вместе — нет.

Понятно, что проблема из-за повторяющихся функций и переменных.

Собственно вопрос: существует ли способ "изоляции" скриптов, чтобы не уникализировать переменные. То есть как сделать так чтобы 9 похожих скриптов работали автономно и не мешали работе других?

зы. попробовал в (function(){...})() заключить. не заработало, а может как-то не правильно сделал
#2 7 августа 2013 в 14:05
хм… а с помощью классов и ООП не пробовали разрешить проблему?
#3 7 августа 2013 в 14:07
Smith
пока нет. в джава не силен. начал разбираться утром =)

из девяти 4 работают одновременно, а 5 — нет
открыл код 5 не работающих и пока не знаю что и менять
как определить чему классы дописать
и что такое ООП?
#4 7 августа 2013 в 14:11
вы сначала покажите сам код, иначе о каком то мифическом мамонте говорим smile

и что такое ООП?

*beez*
в двух словах не объяснить, советую погуглить.
#5 7 августа 2013 в 14:11
Насерфил вот такое решение, но что делать не совсем понятно.

" Вместо инициализации через свойство window.onload использовать создание обработчика на само событие, в этом случае переопределения не будут, и оба скрипта будут специализироваться.
Например, пусть у нас будет простой вариант кроссбраузерной функции, которая вешает эти обработчики:
function addListener(obj, type, listener) {
if (obj.addEventListener) {
obj.addEventListener(type, listener, false);
return true;
} else if(obj.attachEvent) {
obj.attachEvent('on' + type, listener);
return true;
}
return false;
}

Тогда оба скрипта можно инициализировать таким образом:
addListener(window, 'load', function() {
// инициализация первого скрипта
});
addListener(window, 'load', function() {
// инициализация второго скрипта
});
#6 7 августа 2013 в 14:15
Smith
погуглил, представил. но есть ли вариант "изолировать" скрипты вместо уникализации функций и переменных?

ооп, конечно, хорошо. но вдруг есть "хитрый способ"

зы. просите код показать? мне что сюда скинуть 9 кодов?😊за которые мне программисты зарядили 10к, но я не повелся и сам забацал. неа =)
#7 7 августа 2013 в 14:17
у вас сами скрипты конфликтуют между собой, не получается назначить обработчик на событие или вызов происходит до загрузки?
#8 7 августа 2013 в 14:22

зы. просите код показать? мне что сюда скинуть 9 кодов? за которые мне программисты зарядили 10к, но я не повелся и сам забацал. неа =)

Smith

если оценочная стоимость в 10К реально, то думаю у вас там не одна проблема, учитывая:

пока нет. в джава не силен. начал разбираться утром =)

*beez*
и

зы. просите код показать? мне что сюда скинуть 9 кодов? за которые мне программисты зарядили 10к, но я не повелся и сам забацал. неа =)

*beez*

без обид, но если хотите что бы кто-либо помог, то подробно расписывайте проблему и приводите примеры. smile
#9 7 августа 2013 в 14:24
Smith
как я понимаю: код скриптов похож между собой и поэтому не работает.
исполнение скрипта по нажатию кнопки.

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


проблема подробно:
несколько скриптов, 9 штук.
в зависимости от значений, которые вводит юзер, выдают результаты расчетов.
типа: модель телефона+марка+поломка=сумма за ремонт. то есть ничего заоблачного.
скрипты автономно функционируют исправно.
после вывода через {ФАЙЛ=тут скрипт+форма вывода.php} на одной странице в статью перестают работать 5 из 9ти скриптов.

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

вопрос: как "изолировать" каждый скрипт, чтобы переменные и функции не перемешивались?
#10 7 августа 2013 в 15:59
в консоли ошибка:
Uncaught TypeError: Cannot read property 'value' of undefined
usage
onclick

сама функция function usage()
onclick="usage()"

есть совпадения в коде скриптов


профессионалы отзовитесь *рудз*! неужели нет способа запустить 9 похожих скриптов на одной странице, чтобы переменные и функции не перемешивались (не переназначались)???
#11 7 августа 2013 в 16:08
Uncaught TypeError: Cannot read property 'value' of undefined

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

Я еще раз повторю, что гадать что вы там намудрили виртуально это просто впустую потраченное время. Я же к сожалению способностями телепатии не обладаю)
#12 7 августа 2013 в 16:19
Smith
я услышал вас
сейчас еще немного почитаю, всмотрюсь и точно буду знать, что конкретно у меня не получается, что спрашивать

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

сейчас попробую перенести все скрипты в один файл, и либо создам обработчик на сами события, например, при помощи функции, которая вешает эти обработчики:

  1. function addListener(obj, type, listener) {
  2. if (obj.addEventListener) {
  3. obj.addEventListener(type, listener, false);
  4. return true;
  5. } else if(obj.attachEvent) {
  6. obj.attachEvent('on' + type, listener);
  7. return true;
  8. }
  9. return false;
  10. }
а потом каждый скрипт в:

  1. addListener(window, 'load', function() {
  2. // инициализация первого скрипта
  3. });
  4. addListener(window, 'load', function() {
  5. // инициализация второго скрипта
  6. });
либо, если не заработает, то буду пробовать создать ООП. Но в этом вообще пока не понимаю, так что пока вариант 1 буду пробовать

зы. кажется что не туда капаю(


Smith
, я пока еще ничего не намудрил. думаю как оформить, чтобы "локализировать" (изолировать) каждый скрипт на странице
#13 7 августа 2013 в 16:21

чтобы переменные и функции не перемешивались (не переназначались)???

*beez*
А использовать локальные переменные вместо глобальных религия не позволяет? Дорогой друг, не в обиду будь сказано, вы стали программировать, не усвоив самых основ… естественно, напоролись на неожиданное (для вас) переприсвоение значений переменных… А потом устраиваете вопли (еще раз, без обид), призывая профессионалов, хотя там школьник справится… ну нельзя так. Садитесь-ка за учебники.
#14 7 августа 2013 в 16:21

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

Smith

инпуты получают значение из той же функции
#15 7 августа 2013 в 16:23

Садитесь-ка за учебники.

Странник
Вы правы. Читать про локальные и глобальные переменные? Решение озвученное в сообщении #12 не трогать? Есть проще решение?
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.