developer tip

jQuery 1.9를 사용하는 MVC 4 프로젝트의 jquery.validate.js 오류

optionbox 2020. 11. 30. 08:05
반응형

jQuery 1.9를 사용하는 MVC 4 프로젝트의 jquery.validate.js 오류


Visual Studio 2012의 템플릿을 사용하여 새 ASP.Net MVC 4 프로젝트를 만들었습니다. jQuery 1.9로 업그레이드 한 후 로그인 기능이 중단됩니다. 특히 오류가 발생합니다.

0x800a138f-JavaScript 런타임 오류 : 정의되지 않은 또는 null 참조의 '호출'속성을 가져올 수 없습니다.

jquery.validate.js의 1172 행, 5 열에서

이 문제를 어떻게 해결할 수 있습니까?


이 문제는 jQuery Validation Plugin 1.11.0pre 에서 수정되었습니다 .

안타깝게도 현재 NuGet에는 시험판 빌드가 없으므로 현재 GitHub에서 직접 jquery.validation.js를 다운로드해야합니다.

이제 NuGet을 통해 jQuery.Validation 1.11을 사용할 수 있습니다 (@Simon_Weaver에게 감사드립니다).

최신 정보

그것은과 같은 일반적인 jQuery를 1.9은 jQuery.Validation 코드 기반에 있지만 아직 발표되지 지원

https://github.com/jzaefferer/jquery-validation/pull/613


jQuery.Migrate 1.1.1을 설치하면 jQuery.Validation 1.11, jQuery 1.9 및 2.x에서 제대로 작동합니다.

뿐만 아니라 install-package jQuery.MigrateBundleConfig.cs에 JavaScript를 추가해야합니다. 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. 모두 thise적절한 값을 가지고있다. 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
});

나는 같은 문제가 있었고, 파이어 폭스에서 문제가 없었지만 여전히 오류가 발생합니다. jquery-2.0.0을 사용하고 있습니다. jQuery 유효성 검사 플러그인 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 버전으로 업데이트했지만 해당 솔루션 중 어느 것도 작동하지 않았습니다. Pre 버전을 다운로드하지 않고 잘 작동하는 유일한 솔루션은 Texellab에서 제안한 솔루션이었습니다.


근본적인 문제는 jQuery 1.7 (새롭고 개선 된 메서드가 추가되었을 때) 이후로 사용되지 않는 일부 메서드가 1.9에서 제거되었다는 것입니다. jQuery Validate는 분명히 업데이트되지 않았으므로 대신 새 메서드를 사용합니다. 제거 된 메서드를 다시 넣는 jQuery Migrate Plugin을 사용하면이 문제가 해결되었음을 알았습니다.


다른 해결책은 다음과 같습니다.

jQuery 1.71 및 jQuery UI 1.8.20과 함께 MVC 3을 사용했습니다. jQuery UI 탭 위젯을 사용하고 각 탭 영역을 설정하여 입력 필드가 포함 된 부분 페이지를로드했습니다.

Firefox v22 및 Chrome v28에서 잘 작동하며 IE10에서는 실패합니다. 내가 얻은 오류는 'Unable to get property'settings 'of undefined or null reference'입니다.

해결 방법은 부분 형식으로 이동하여 다음 코드를 주석 처리하는 것이 었습니다.

<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>*

이제 모든 브라우저에서 성공적으로 작동합니다.

참고URL : https://stackoverflow.com/questions/14659023/error-in-jquery-validate-js-in-mvc-4-project-with-jquery-1-9

반응형