JavaScript函数在通过Ajax加载时会出错

时间:2011-07-19 10:32:10

标签: php javascript ajax dom

修改 好的,我相信我已经找到了解决问题的方法,使用@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>然后尝试运行它,它仍然感觉更整洁。

感谢所有建议,我欢迎任何有关上述方法/解决方案的意见。

4 个答案:

答案 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.
})();

看看是否能解决问题?