Почему происходит сбой этого кода прототипа в Magento? - PullRequest
0 голосов
/ 16 сентября 2010

В течение последних полутора часов я отслеживаю звонки Javascript в магазине Magento, который я строю, потому что у меня есть странный эффект, что при проверке я не могу покинуть страницу 2 (адрес доставки) одной страницыоформить заказ, если я не переключусь с «отправить на этот адрес» на «отправить на другой адрес».

Я проследил его до этого фрагмента кода javascript в form.js, находящегося в Regionupdater.setMarkDisplay (строка 254 и далее)

Поскольку я сам человек jquery, я 'На самом деле я не нахожусь в цикле с функциональностью прототипа, но я предполагаю, что .up и .down - это практически то, что делает jquery с .parent (s) и .children ()?!

elem = $(elem);
var labelElement = elem.up(0).down('label > span.required') ||
                   elem.up(1).down('label > span.required') ||
                   elem.up(0).down('label.required > em') ||
                   elem.up(1).down('label.required > em'); 

Элемент - это регионвыберите поле в форме.Я предполагаю, что он пытается найти метку для этого поля (которое существует).Но оба фрагмента "elem.up (0)", по-видимому, генерируют

[Exception... "An invalid or illegal string was specified" code: "12" nsresult: "0x8053000c (NS_ERROR_DOM_SYNTAX_ERR)"]

Я понятия не имею, что вызывает это.

Ответы [ 2 ]

1 голос
/ 16 сентября 2010

Вы в основном правы относительно того, что up и down делают.Эта строка кода выбирает первый соответствующий элемент:

elem = $(elem);
var labelElement = elem.up(0).down('label > span.required') || // Up to parent, down to first span.required inside a label
                   elem.up(1).down('label > span.required') || // Up to grandparent, down to first span.required inside a label
                   elem.up(0).down('label.required > em') ||   // up to parent, down to first em inside a label.required
                   elem.up(1).down('label.required > em');     // up to grandparent, down to em within a label.required

... где в каждом случае он останавливается на первом найденном элементе.

Ошибка выглядит так, как если бы она была выброшена издвигатель селектора или что-то, переданное селектору, он не понимает.Ни один из этих селекторов не является особенно передовым, так что это немного странно.Вы используете Prototype 1.7 RC2?Поскольку текущий выпущенный Prototype все еще использует только свой собственный встроенный механизм выбора (тогда как 1.7 добавляет подключаемые).

А! Вот и все - посмотрите наid с элементов в этой области.Есть ли в них пробелы, или «#», или «:», что-то в этом роде?Кажется, я помню ошибку в механизме селектора Prototype, когда он принимает довольно скучные идентификаторы ... (Почему идентификаторы актуальны? Под крышками механизм селектора может использовать их при обработке потомков или дочерних селекторов - например, при обработке down звонки ...)

Обновление Эта (исправленная) ошибка может относиться к этому, если вы используете старую версию Prototype, вы все равно можете бытьврезаться в это.Определенно стоит посмотреть на идентификаторы.

0 голосов
/ 20 сентября 2010

У меня такая же ошибка, на IE8, но в моем случае это не из-за неэкранированного двоеточия. У меня ошибка, потому что я использую собственную тему, которая изменила DOM, поэтому elem.up (0) указывает на другой элемент. Вы должны посмотреть skin / frontend / your_template / js / opcheckout.js в строках 420 и 428 Функции setSameAsBilling и syncWithBilling или измените файл шаблона - shipping.phtml. Также на скине по умолчанию эта ошибка не появляется.

...