我遇到了Magento错误的问题,而且我已经尝试了几个小时修复它,但不知怎的,我无法弄明白。
我的客户商店在Magento 1.4.1.1上运行,他希望我将其升级到最新的1.9.2.2(社区版)。一切都很好,模板看起来应该是这样,但结账过程刚刚工作,我真的不知道为什么。
每次我在购物车中放一些东西去结帐时,它会将我带到我可以选择注册或登录或继续作为访客的页面。我选择继续作为访客并点击" next",但绝对没有任何反应。
Firefox控制台显示以下错误:
TypeError: element is null in prototype.js:1931
我检查了.js文件,可以看到它在哪一点上使用了一个空元素,这就是:
hide: function(element) {
element = $(element);
element.style.display = 'none';
return element;
所以基本上它试图隐藏一个对象,它是null。问题是:我不知道哪个文件或导致错误以及如何调试它。我已经阅读了多个帖子,我只能找到一个合适的帖子,上面说某个头部可能会丢失一个结束标签。但是,只有大量的文件,我不知道在哪里看。
如果有人遇到类似问题或知道问题所在,请分享以帮助我解决此问题。
感谢您的帮助!
编辑:
我已经使用过firebug并且能够看到是什么造成了这个错误。 似乎我的opcheckout.js中存在问题。但这是一个magento文件,它没有以任何方式改变,并且在skin / base /文件夹中。
我能想到的唯一一件事就是他们从第1.4.1.1节到第1.9.2.2节改变了一些东西而我没有看到它。
这里是opcheckout.js的代码:
setMethod: function(){
if ($('login:guest') && $('login:guest').checked) {
this.method = 'guest';
var request = new Ajax.Request(
this.saveMethodUrl,
{method: 'post', onFailure: this.ajaxFailure.bind(this), parameters: {method:'guest'}}
);
Element.hide('register-customer-password');
this.gotoSection('billing', true);
}
错误由" Element.hide(' register-customer-password')创建;"。
这是我的主题代码中的代码,其中div位于:
<li class="fields" id="register-customer-password">
<div class="field">
<label for="billing:customer_password" class="required"><em>*</em><?php echo $this->__('Password') ?></label>
<div class="input-box">
<input type="password" name="billing[customer_password]" id="billing:customer_password" title="<?php echo $this->__('Password') ?>" class="input-text required-entry validate-password" />
</div>
</div>
<div class="field">
<label for="billing:confirm_password" class="required"><em>*</em><?php echo $this->__('Confirm Password') ?></label>
<div class="input-box">
<input type="password" name="billing[confirm_password]" title="<?php echo $this->__('Confirm Password') ?>" id="billing:confirm_password" class="input-text required-entry validate-cpassword" />
</div>
</div>
</li>
所以在我看来它试图隐藏的元素就在那里,我不明白为什么它说Element是空的......
有什么想法吗?
答案 0 :(得分:0)
首先测试元素的存在,这样可以防止抛出'undefined'或'null'错误:
if($(element)){
element = $(element);
element.style.display = 'none';
return element;
}
$(element)相当于document.getElementById(''+ element +'')