Jquery Combobox +底层下拉列表+ jquery验证的验证

时间:2014-06-26 18:08:35

标签: jquery asp.net-mvc combobox jquery-validate

我正在asp.net mvc中开发一个应用程序,并尝试使用jquery验证插件进行验证。

我有一个下拉列表,使用jQuery代码转换为组合框:

http://jqueryui.com/autocomplete/#combobox

我遇到的问题是验证问题。如果用户在没有从下拉列表中选择值的情况下提交表单,则会在帖子后面显示错误消息。

我遇到的问题是,如果我从底层下拉列表中手动选择一个值,则错误消息会消失。但是,如果我使用组合框,那么即使基础下拉列表中的值发生更改,错误消息也不会消失。

更新值的组合框中的代码是:

this._on( this.input, {
          autocompleteselect: function( event, ui ) {
            ui.item.option.selected = true;
            this._trigger( "select", event, {
              item: ui.item.option
            });
          },

jquery中的验证是如何完成的?是否不检查基础下拉列表的值是否发生变化?

谢谢!

---- HTML Markup和jQuery。

对于HTML。我正在使用asp .net mvc代码如下:

<div class="form-group">
  @Html.LabelFor(model => model.Property.Area, new { @class = "col-xs-12 col-sm-4 col-md-2" })
  <div class="input-group col-xs-12 col-sm-8 col-md-4">@Html.DropDownListFor(model => model.Property.Area, Model.AreaLookUps, "--Select Area--", new { onchange = "initializeMapAndGeocode();", @class = "form-control combobox" })</div> 
  <div id="property-area-error" class="col-sm-offset-4 col-md-offset-2"><span class="text-danger">@Html.ValidationMessageFor(model => model.Property.Area)</span></div>
</div>

这会生成以下标记

<div class="form-group">
  <label class="col-xs-12 col-sm-4 col-md-2" for="Property_Area">Area*</label>
  <div class="input-group col-xs-12 col-sm-8 col-md-4">
    <select class="form-control combobox" data-error-div-id="property-area-error" data-val="true" data-val-number="The field Area* must be a number." data-val-required="Please select the appropiate option." id="Property_Area" name="Property.Area" onchange="initializeMapAndGeocode();">
    <option value="">--Select Area--</option>

我没有任何验证方法。我只是简单地包含了jQuery validate和jQuery.Unobtrusive.Validation库。

感谢。

- 更新 我通过添加错误div为“id”并将id作为数据属性添加到“select”来创建了一种解决方法。在组合框脚本中,当组合框值更改时,我隐藏了此错误div。这可能不是最好的解决方案 - 但它是一种解决方法。

1 个答案:

答案 0 :(得分:0)

引用OP:

  

“如何完成jquery中的验证?是否不检查基础下拉列表的值是否发生变化?”

它只是检查指定的 inputtextareaselect元素(在form容器中)。如果您正在执行将GUI元素中的数据移动到隐藏的inputtextareaselect元素的操作,则由您自己在正确的元素上手动声明规则。您可能还需要使用.valid()方法手动触发元素验证。

这里做的非常相似:https://stackoverflow.com/a/23976174/594235