Magento のチェックアウト ページで、次のエラーが表示されます。
VarienForm is not defined
[Break On This Error]
var loginForm = new VarienForm('login-form', true);
しかし、ユーザー名とパスワードを入力すると、ログインします。エラーを削除できますか?
PS: varien js ライブラリをフッターに移動しました。
Magento のチェックアウト ページで、次のエラーが表示されます。
VarienForm is not defined
[Break On This Error]
var loginForm = new VarienForm('login-form', true);
しかし、ユーザー名とパスワードを入力すると、ログインします。エラーを削除できますか?
PS: varien js ライブラリをフッターに移動しました。
まだ定義されていない関数を呼び出そうとしているようです。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);
});
このコードは未定義のエラーなしでページ上で実行され、フッターまたはヘッダーに配置できます。
おそらくJavaScriptフレームワークの競合です。
jQuery は、カート機能、検証、およびウィンドウ シェード効果で優先的に使用されるプロトタイプと競合します。
Prototype の前に jQuery を head にロードし、jQuery の noconflict 関数を呼び出します。
varien のものを元の場所に戻します。フレームワークは、ページが読み込まれる前に読み込まれる必要があるため、適切に機能します。
エラーは、スクリプトが機能していないことを意味します-それだけです。ログインしているという事実は、VarienForm オブジェクトとは何の関係もありません。これは送信ボタンのある HTML フォームであるため、もちろん送信してログインします。VarienForm の主なタスクは、送信前にフォーム データを検証することです。したがって、通常、空のパスワードまたはログインでログインしようとすると、VariendForm によってフォームが送信されなくなります。あなたの場合、スクリプトが壊れていると、送信前に何もしません。
申し訳ありませんが、最善のアドバイスは、このライブラリを移動しないことです。はい、このエラーが発生するすべてのページを修正できますが、多くの時間がかかります。また、サードパーティの拡張機能をインストールする場合は、それらも変更する必要があります。そのような最適化に価値があるとは思いません。
PS。また、Magento 2 をいじっていない限り、VarienForm は jQuery ではなくプロトタイプに基づいているため、タグが正しくなく、SnapGravy のコードはおそらく機能しません。