【问题标题】:jQuery UI DatePicker only trickers validation every second timejQuery UI DatePicker 只会欺骗验证每秒钟一次
【发布时间】:2013-09-13 08:20:07
【问题描述】:

我上传了一个简单的应用程序,您可以在其中获得与我一样的体验 日期选择器 jQuery UI: DatePickerValidationMvchttp://sdrv.ms/17tS25J

我在我的 UI 中使用 jQuery UI DatePicker,标记和脚本如下所示:

@Html.TextBoxFor(model => model.ExpireDateTime, new { id = "expiration-date", @Value = Model.ExpireDateTime.ToString("dd-MM-yyyy") })

<script type="text/javascript">
    $(function () {
        $('#expiration-date').datepicker({ dateFormat: 'dd-mm-yy' });
    });
</script>

我正在使用远程验证,我在模型上的属性如下所示:

[Remote("IsDateBetweenDateRangeAction", "Home", HttpMethod = "POST")]

我只是使用 Visual Studio 中的默认 MVC 4 模板。 因此我引用了这些脚本:

jquery-1.8.2.js jquery-ui-1.8.24.js

正在生成的标记如下所示:

<div class="editor-field">
    <input Value="13-09-2015" data-val="true" data-val-date="The field Expiration Date (DD-MM-YYYY) must be a date." data-val-remote="&#39;Expiration Date (DD-MM-YYYY)&#39; is invalid." data-val-remote-additionalfields="*.ExpireDateTime" data-val-remote-type="POST" data-val-remote-url="/Home/IsDateBetweenDateRangeAction" data-val-required="The Expiration Date (DD-MM-YYYY) field is required." id="expiration-date" name="ExpireDateTime" type="text" value="13-09-2015 09:57:14" /><br />
    <span class="field-validation-valid" data-valmsg-for="ExpireDateTime" data-valmsg-replace="true"></span>
</div>

有趣的是,当我使用 DatePicker 验证更改日期时,只会每 2 次被欺骗一次。

看来我不是唯一有这种经历的人: https://stackoverflow.com/questions/11341110/jquery-datepicker-only-every-second-click-event-fires

任何人都知道如何在每次更改日期时调用我的验证方法,而不仅仅是每次更改一次?

我上传了一个简单的应用程序,您可以在其中获得与我一样的体验 日期选择器 jQuery UI: DatePickerValidationMvc:http://sdrv.ms/17tS25J

【问题讨论】:

    标签: jquery asp.net-mvc jquery-ui validation jquery-ui-datepicker


    【解决方案1】:

    我找到了上述问题的解决方案。在 onClose 事件上执行的函数就是答案:

    $(function () {
        $("#expiration-date").datepicker({
    
            onClose: function () {
                $("#register-imei-form").validate().element("#expiration-date");
            }
    
        });
    });
    

    我在这个帖子中找到了答案: jQuery UI Datepicker with altfields: Validation not firing when it should

    【讨论】:

      【解决方案2】:

      将 JS 文件添加到您的页面或 PartialView 以在 MVC 中添加 client *validation*。它们应该在 Scripts 文件夹中。

      MSDN 信息:

      启用客户端验证 要在 ASP.NET MVC 3 中启用客户端验证,您必须设置两个标志并且必须包含三个 JavaScript 文件。 打开应用程序的 Web.config 文件。验证 ClientValidationEnabled 和 UnobtrusiveJavaScriptEnabled 在应用程序设置中是否设置为 true。根 Web.config 文件中的以下片段显示了正确的设置:

       <appSettings>
        <add key="ClientValidationEnabled" value="true"/> 
        <add key="UnobtrusiveJavaScriptEnabled" value="true"/> 
       </appSettings>
      

      <head>
        <title>@View.Title</title>
        <link href="@Url.Content("~/Content/Site.css")" rel="stylesheet" type="text/css" />
        <script src="http://ajax.microsoft.com/ajax/jQuery/jquery-1.4.2.min.js"></script>
        <script src="http://ajax.microsoft.com/ajax/jquery.validate/1.7/jquery.validate.min.js"></script>
        <script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
      </head>
      

      【讨论】:

      • 感谢您的回复 Agnakor,但我的解决方案已经在做您提到的事情。无论如何,我找到了处理 DatePicker 的 onClose 事件问题的解决方案:)
      • 你从来没有提到你有一些附加的事件......但我很高兴你的问题得到了解决。
      • 嗨 Agnakor,其实我一开始并没有处理任何事件,但事实证明,处理 onClose 事件解决了问题。享受春天和代码;)
      猜你喜欢
      • 2013-03-15
      • 2017-08-04
      • 2017-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-29
      • 2014-05-13
      • 1970-01-01
      相关资源
      最近更新 更多