-2

在 magento 的结帐页面上,我收到此错误:

VarienForm is not defined [Break On This Error]

var loginForm = new VarienForm('login-form', true);

但是当我输入我的用户名和密码时,它会登录。我可以删除错误吗?

PS:我已将 varien js 库移至页脚。

4

3 回答 3

0

看起来您正在尝试调用尚未定义的函数,在 JavaScript 中,您需要在使用之前声明变量、函数和对象。

如果您将所有定义移到页脚并尝试在页面中间调用它们,您将收到“未定义”错误。

// Example Success
var test = "OK!";
alert(test) // Alerts: OK!

// Example Fail
alert(test); // Alerts: undefined
var test = "OK!";

简单的示例,但它适用于上面提到的所有内容,您使用的所有内容都必须在使用之前定义。

$(function() {

    // Define VarienForm here somewhere
    var loginForm = new VarienForm('login-form', true);

});

此代码应该在您的页面上运行而没有未定义的错误,并且可以放置在页脚或页眉中。

于 2012-11-26T07:40:52.457 回答
0

该错误意味着您的脚本不起作用 - 就是这样。事实上,您正在登录与 VarienForm 对象无关 - 这是一个带有提交按钮的 HTML 表单,因此它当然会提交并让您登录。 VarienForm 的主要任务是在提交之前验证表单数据。因此,通常如果您尝试使用空密码或登录名登录,VariendForm 会阻止提交表单。在您的情况下,当脚本被破坏时,它在提交之前不会做任何事情。

所以,对不起,但最好的建议是 - 不要移动这个库。是的,您可以修复会遇到此错误的每个页面,但这需要很长时间。如果您要安装第 3 方扩展,您很可能也必须修改它们。我不认为,这样的优化是值得的。

PS。除非您在玩 Magento 2,否则 VarienForm 基于 Prototype,而不是 jQuery,因此您的标签不正确,SnapGravy 的代码很可能无法工作。

于 2012-11-26T15:11:09.560 回答
0

可能是javascript框架冲突。

jQuery 与 Prototype 冲突,Prototype 是购物车功能、验证和窗帘效果中偏好使用的东西。

在 Prototype 之前的头部加载 jQuery,然后调用 jQuery noconflict 函数。

在这里回答了 Magento 中的 jQuery

将不同的东西移回它所属的地方。框架需要在页面加载之前加载,这样它们才能正常运行。

于 2012-11-26T18:57:24.527 回答