Jquery未定义但函数执行正常

时间:2012-11-26 06:58:40

标签: javascript jquery magento

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

VarienForm is not defined [Break On This Error]

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

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

PS:我已经将varien js库移到了页脚。

3 个答案:

答案 0 :(得分: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);

});

此代码应在您的页面上运行,没有未定义的错误,可以放在页脚或标题中。

答案 1 :(得分:0)

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

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

PS。除非你正在玩Magento 2,否则VarienForm基于Prototype,而不是jQuery,所以你的标签是不正确的,SnapGravy的代码很可能不起作用。

答案 2 :(得分:0)

可能是javascript框架冲突。

jQuery与Prototype冲突,这是优先使用的购物车功能,验证和窗帘效果。

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

在这里回答jQuery in Magento

将varien内容移回其所属的位置。框架需要在页面加载之前加载,以便它们正常运行。