Visual Studio 2012のテンプレートを使用して、新しいASP.Net MVC 4プロジェクトを作成しました。jQuery1.9にアップグレードした後、ログイン機能が壊れています。具体的には、エラーが発生します
0x800a138f-JavaScriptランタイムエラー:未定義またはnull参照のプロパティ 'call'を取得できません
jquery.validate.jsの行1172、列5
この問題を修正するにはどうすればよいですか?
この問題はjQuery Validation Plugin 1.11.0preで修正されています。
残念ながら、現在NuGetにはプレリリースビルドがないため、現在はGitHubからjquery.validation.jsを直接ダウンロードする必要があります。
jQuery.Validation 1.11 がNuGet経由で利用可能になりました(@Simon_Weaverに感謝)。
[〜#〜] update [〜#〜]
JQuery 1.9のgeneralサポートはjQuery.Validationコードベースにありますが、まだリリースされていないようです。
JQuery.Migrate 1.1.1をインストールすると、jQuery.Validation 1.11、jQuery 1.9および2.xで正常に動作します。
install-package jQuery.Migrate
、JavaScriptをBundleConfig.csに追加する必要があります-jQueryの直後に追加しました。これは、jQueryを登録する行が次のようになっているものです。
bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
"~/Scripts/jquery-{version}.js", // jQuery itself
"~/Scripts/jquery-migrate-{version}.js")); // jQuery migrate
問題は、検証スクリプト内のコード行です
$.event.handle.call(this,e);
ここでの問題は$.event.handle
。 this
とe
の両方に適切な値があります。 jQueryは、移行スクリプト http://code.jquery.com/jquery-migrate-1.2.0.js に従って、jQuery.event.dispatchを支持して$ .event.handleを廃止しました。
これらのエラーの修正は、処理する参照をディスパッチで置き換えるだけで簡単です。
これをdocument.readyコールバックでラップして、他のスクリプトの実行後に実行されるようにすることができます。
$(function(){
jQuery.event.handle = jQuery.event.dispatch
});
私は同じ問題を抱えていましたが、Firefoxでは問題ありませんが、それでもエラーが発生します。 jquery-2.0.0を使用しています。 jQuery Validationプラグイン1.11.1
修正が見つかりました:交換
@section Scripts {
@Scripts.Render("~/bundles/jqueryval")
}
と
@section Scripts{
<script src="@System.Web.Optimization.BundleTable.Bundles.ResolveBundleUrl("~/bundles/jqueryval")"></script>
}
バンドルのスクリプトパスを次の行に置き換えるとうまくいきました。
<script src="@System.Web.Optimization.BundleTable.Bundles.ResolveBundleUrl("~/bundles/jqueryval")"></script>
Nugetを使用してjquery検証を更新し、jqueryを2.0バージョンに更新しましたが、これらのソリューションはいずれも機能しませんでした。何もプレバージョンをダウンロードせずに正常に動作した唯一のものは、テクセラブによって提案されたソリューションでした
根本的な問題は、jQuery 1.7(新しい、改良されたメソッドが追加されたとき)以降廃止されていたいくつかのメソッドが1.9で削除されたことです。 jQuery Validateは明らかに更新されていないため、代わりに新しいメソッドを使用します。削除されたメソッドを元に戻すjQuery Migrateプラグインを使用すると、これに関する問題が解決したことがわかりました。
別のソリューションを次に示します。
JQuery 1.71およびjQuery UI 1.8.20でMVC 3を使用しました。 jQuery UIタブウィジェットを使用し、各タブ付きエリアを設定して、入力フィールドを含む部分的なページをロードしました。
Firefox v22およびChrome v28でうまく動作し、IE10で失敗します。エラーは、未定義またはnull参照のプロパティ '設定'を取得できませんでした 'でした。
解決策は、部分フォームに移動して、次のコードをコメントアウトすることでした。
<script src="@Url.Content("~/Scripts/jquery-1.7.1.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>*
すべてのブラウザで正常に動作するようになりました。