Функции JavaScript выдают ошибки при загрузке через Ajax - PullRequest
1 голос
/ 19 июля 2011

РЕДАКТИРОВАТЬ: ОК, я думаю, что я нашел способ обойти проблему, используя информацию, опубликованную @ManseUK вместе с комментарием @ Йохана.Как n00b, я не могу ответить на свой вопрос, но я добавил объяснение ниже вопроса на случай, если это поможет кому-то еще.

Я переписываю часть решения для электронной коммерции, которое было написано другой командой разработчиков несколько лет назад.В новой версии мы экспериментируем с сокращением пути пользователя, используя Ajax, но это приводит к ошибкам JavaScript и вызывает сбой некоторых функций.URL разработчика здесь:

http://cognition.thelightbulb.co.uk/type-18/general-purpose-lamps-and-bulbs/craftlight-daylight

Ошибки появляются после выбора выпадающих списков и отображения продукта.

Ошибки отображаются наиболее заметно в IE7:

Error: 'frm.qty' is null or not an object
Error: 'qty.value' is null or not an object

Я полагаю, что именно в этом и заключается проблема:

var frm = document.frmOrder; 
var qty = frm.qty;

В строках выше, frmOrder - это название формы, а qty - это название ввода для количества продукта.

Сравните это с http://cognition.thelightbulb.co.uk/product-54, когда продукт загружается без процесса выбора Ajax, и вы увидите, что функции работают правильно.

Я подозреваю, что проблема связана с тем, что var frm = document.frmOrder; не работает из-за того, как он связан с DOM при загрузке с Ajax.

Я использую innerHTML=xmlhttp.responseTextкак метод Ajax.Есть ли альтернативный способ определения var frm, чтобы он работал правильно при загрузке с Ajax?

EDIT: Использование информации, размещенной @ManseUK вместе с комментарием @ JohanЯ добавил еще один аргумент в CheckMinQty(minorder), чтобы он теперь выглядел следующим образом ...

function CheckMinQty(minorder,qty)

... где qty передается функции в onclick событие как document.forms['frmOrder'].qty.value

Затем я переместил всю функцию в отдельный файл .js.Возможно, это не лучший подход, но для Ajax-вызова все еще кажется более уместным просто возвращать работоспособный HTML, который CheckMinQty может использовать, вместо того, чтобы вводить целую загрузку <script> и затем пытаться запустить его.

Спасибо за все предложения, и я приветствую любые комментарии о подходе / решении, изложенном выше.

Ответы [ 4 ]

0 голосов
/ 19 июля 2011

При загрузке скрипта через AJAX у вас больше нет события DOMReady.Другими словами, если вы хотите выполнить свой скрипт при загрузке AJAX, вы должны использовать самовоспроизводимые функции .Оберните загруженный ajax-скрипт в функцию, подобную этой:

(function(){
    // Do what you want to do here.
})();

Посмотрите, решит ли это проблему?

0 голосов
/ 19 июля 2011

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

0 голосов
/ 19 июля 2011

Хотя решение Manse может работать, используйте более разумный способ и присвойте идентификатору форму, и, так как вы все равно используете jQuery, извлекайте форму с помощью var frm = $(#formid); Мало того, что это легче написать, это намного проще читать вас и всех остальных.

0 голосов
/ 19 июля 2011

Изменить это

var frm = document.frmOrder; 

к этому

var frm = document.forms['frmOrder']; 

Это даст вам ручку к форме

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...