为什么Magento中的原型代码会崩溃?

在过去的一个半小时里,我在我正在建造的Magento商店跟踪Javascript电话,因为我有一个奇怪的效果,当我们退房时,我不能离开单页结账的第2页(送货地址),除非我从“发送到此地址”切换到“发送到另一个地址”。 我已经将它追溯到form.js中的这段javascript代码,位于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是表单中的区域选择字段。 我假设它正在尝试找到该字段的标签(存在)。但两个“elem.up(0)”碎片显然都抛出了
[Exception... "An invalid or illegal string was specified" code: "12" nsresult: "0x8053000c (NS_ERROR_DOM_SYNTAX_ERR)"]
我不知道是什么引发了这个。     
已邀请:
你基本上对what2ѭ和
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
s。他们中的任何一个都有空格或“#”或“:”,这类似的东西?我似乎回忆起Prototype选择器引擎中的一个错误,它假设相当无聊的ID ...(为什么ID相关?在封面下,选择器引擎可以在处理后代或子选择器时使用它们 - 例如,处理时
down
调用...) 更新此(修复)错误可能与此有关,如果您使用的是较旧版本的Prototype,您可能仍会遇到它。绝对值得看看ID。     
我有同样的错误,在IE8上,但在我的情况下,它不是因为未转义的冒号。我有错误,因为我正在使用修改DOM的自定义主题,因此elem.up(0)指向其他元素。 你应该在第420和428行看一下skin / frontend / your_template / js / opcheckout.js 函数setSameAsBilling和syncWithBilling或更改模板文件 - shipping.phtml。 同样在默认皮肤上,此错误不会出现。     

要回复问题请先登录注册