29 votes

ASP.NET MVC 4 Bundle de scripts de validation jQuery ne fonctionne pas

J'ai récemment mis à jour un site web pour l'utilisation ASP.NET MVC 4 et avoir le code suivant pour rendre mon jQuery validation bundle.

Mais j'obtiens l'erreur suivante:

Microsoft JScript runtime error: Object doesn't support property or method 'live'

Et cette erreur lorsque vous cliquez dans une zone de texte:

Unhandled exception at line 1234, column 5 in http://localhost:13112/Scripts/jquery.validate.js

0x800a138f - Microsoft JScript runtime error: Unable to get value of the property 'call': object is null or undefined

Mon bundle code:

    bundles.Add(new ScriptBundle("~/bundles/jqueryval").Include(
                    "~/Scripts/jquery.unobtrusive*",
                    "~/Scripts/jquery.validate*"));

Mon _Layout.cshtml code:

    @Styles.Render("~/Content/css")
    @Styles.Render("~/Content/themes/base/css")
    @Scripts.Render("~/bundles/jquery")
    @Scripts.Render("~/bundles/jqueryval")
    @Scripts.Render("~/bundles/jqueryui")
    @Scripts.Render("~/bundles/modernizr")

Voici mon rendu HTML:

<link href="http://stackoverflow.com/Content/site.css" rel="stylesheet"/>

        <link href="http://stackoverflow.com/Content/themes/base/jquery.ui.core.css" rel="stylesheet"/>
<link href="http://stackoverflow.com/Content/themes/base/jquery.ui.resizable.css" rel="stylesheet"/>
<link href="http://stackoverflow.com/Content/themes/base/jquery.ui.selectable.css" rel="stylesheet"/>
<link href="http://stackoverflow.com/Content/themes/base/jquery.ui.accordion.css" rel="stylesheet"/>
<link href="http://stackoverflow.com/Content/themes/base/jquery.ui.autocomplete.css" rel="stylesheet"/>
<link href="http://stackoverflow.com/Content/themes/base/jquery.ui.button.css" rel="stylesheet"/>
<link href="http://stackoverflow.com/Content/themes/base/jquery.ui.dialog.css" rel="stylesheet"/>
<link href="http://stackoverflow.com/Content/themes/base/jquery.ui.slider.css" rel="stylesheet"/>
<link href="http://stackoverflow.com/Content/themes/base/jquery.ui.tabs.css" rel="stylesheet"/>
<link href="http://stackoverflow.com/Content/themes/base/jquery.ui.datepicker.css" rel="stylesheet"/>
<link href="http://stackoverflow.com/Content/themes/base/jquery.ui.progressbar.css" rel="stylesheet"/>
<link href="http://stackoverflow.com/Content/themes/base/jquery.ui.theme.css" rel="stylesheet"/>

        <script src="/Scripts/jquery-1.9.0.js"></script>

        <script src="/Scripts/jquery.unobtrusive-ajax.js"></script>
<script src="/Scripts/jquery.validate.js"></script>
<script src="/Scripts/jquery.validate.unobtrusive.js"></script>

        <script src="/Scripts/jquery-ui-1.9.2.js"></script>

        <script src="/Scripts/modernizr-2.6.2.js"></script>

Quelqu'un peut-il rappeler pourquoi cette erreur peut se produire?

Merci, Alex.

49voto

Magnus Points 15064

L' .vivre méthode a été déprécié en jQuery v1.7+, et retiré en jQuery v1.9+.

Rapport de bug: http://bugs.jquery.com/ticket/13213
Explication: http://jquery.com/upgrade-guide/1.9/#live-removed

.live() supprimé

L' .live() la méthode a été abandonné depuis jQuery 1.7 et a été retiré dans la 1.9. Nous vous recommandons la mise à niveau de code pour utiliser le .sur() la méthode au lieu de cela. Pour correspondre exactement à $("un.foo").live("click", fn), par exemple, vous pouvez écrire $(document).on("click", "un.foo", fn). Pour plus d' d'informations, voir le .sur() de la documentation. Dans l'intervalle, le jQuery Migrer plugin peut être utilisé pour restaurer la .live() fonctionnalité.

Comment réparer: Télécharger le jquery migrate plugin et l'ajouter à votre groupement:

  bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
              "~/Scripts/jquery-{version}.js",
              "~/Scripts/jquery-migrate-{version}.js"));

Mise à jour: Le migrer plugin est maintenant disponible à partir de Nuget ainsi:

PM> Install-Package jQuery.Migrer

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X