Конфликт между Mootools и чистым JS-скриптом

#mootools

#mootools

Вопрос:

Я застрял с чистым JS-скриптом, который должен быть включен в Joomla (1.7, Mootools 1.3.2)

и вызывает конфликт с этой библиотекой, прекрасно работая вне ее.

Примеры :

Ошибка Firebug в строке 133 :

 document.getElementById("pu_"   champs[i]) is null
  

Я пробовал всевозможные решения, переименовывая определенные переменные, используя $ вместо document.getElementById, оборачивая каждую функцию вокруг анонимной функции. Безрезультатно.

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

Ответ №1:

mootools является прототипом.

 var champs = ['surfaceMaison','surfaceGarage','terrasseCouverte','terrasseNonCouverte','cloture'];
var prix = ['pack','valeur','valeur','valeur'];
var options = ['toitureMultipentes','doucheItalienne','wcSuspendu','enduitTaloche','voletsRoulants','climGainable'];


// and..
for (var i in champs) 


for (var i in options) 
  

это не так, как есть, он пойдет вверх по цепочке прототипов и получит материал, который mootools добавляет к прототипу массива.

в общем, for var in object конструкция as всегда предназначалась для ОБЪЕКТОВ, а не для массивов. это работает в любом случае, потому что в javascript у вас нет правильного типа массива, это просто тип объекта со свойствами, подобными массиву (например, длина).

вместо этого выполните цикл массивов с помощью options.each(function(el, i) {} или обычного цикла for .

кроме того, вы можете проверить hasOwnProperty :

 for (var i in champs) 
    if (champs.hasOwnProperty(i)) {
        // do the stuff
    }