修改 好的,我相信我已经找到了解决问题的方法,使用@ManseUK发布的信息以及@Johan的评论。作为一个n00b我不能回答我自己的问题,但我在问题下面添加了一个解释,以防它帮助其他人。
我正在重写由电子商务解决方案编写的部分内容 几年前另一个开发团队。在新版本中,我们是 尝试使用Ajax缩短用户旅程,但这样做 给出JavaScript错误并导致某些函数失败。 Dev 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;
由于与...的关联方式不起作用的事实有关 加载Ajax时的DOM。我使用
innerHTML=xmlhttp.responseText
作为Ajax方法。是 有另一种方法来定义var frm
以便它能够运作 加载Ajax时是否正确?
修改
使用@ManseUK发布的信息以及@Johan的评论,我在CheckMinQty(minorder)
添加了另一个参数,现在它看起来像这样......
function CheckMinQty(minorder,qty)
...其中qty
作为onclick
document.forms['frmOrder'].qty.value
事件的函数
然后我将整个函数移到一个单独的.js文件中。这可能不是最好的方法,但是对于Ajax调用来说,只返回CheckMinQty
可以使用的可行HTML而不是引入整个<script>
然后尝试运行它,它仍然感觉更整洁。
感谢所有建议,我欢迎任何有关上述方法/解决方案的意见。
答案 0 :(得分:0)
更改此
var frm = document.frmOrder;
到这个
var frm = document.forms['frmOrder'];
这将为您提供表格的句柄
答案 1 :(得分:0)
document.frmOrder引用页面上带有id frmOrder的元素,该元素恰好是此页面上的表单。只是尝试将正确的form-element作为变量。
答案 2 :(得分:0)
虽然Manse的解决方案可能有效,但使用更合理的方式并为表单分配一个id,因为无论如何你都在使用jQuery,用var frm = $(#formid);
检索表单不仅更容易编写,而且更多你和其他人更容易阅读。
答案 3 :(得分:0)
通过AJAX加载脚本时,您不再有DOMReady
个事件。换句话说,当您想在AJAX加载时执行脚本时,您应该使用自调用函数。
将ajax加载的脚本包装在这样的函数中:
(function(){
// Do what you want to do here.
})();
看看是否能解决问题?