РЕДАКТИРОВАТЬ: ОК, я думаю, что я нашел способ обойти проблему, используя информацию, опубликованную @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>
и затем пытаться запустить его.
Спасибо за все предложения, и я приветствую любые комментарии о подходе / решении, изложенном выше.