【问题标题】:jQuery validation fails when using KnockoutJS and Jquery dialog使用 KnockoutJS 和 Jquery 对话框时 jQuery 验证失败
【发布时间】:2012-08-29 03:52:58
【问题描述】:

我有一个在 MVC3 中使用 html.RenderAction 呈现的表单。

除此之外,我还有一个用于淘汰赛的 jquery 模板。使用默认的“data-val-required”属性将模型正确渲染到视图中。

但是我注意到 jQuery 验证总是返回 true。

<div id="dlgAdd" data-bind="template: { name: 'editTemplate', data: selected }">
</div>
<script id="editTemplate" type="text/html">  
<div> 
@{
    Html.RenderAction("EditDialog");
}
</div>    
</script>

EditDialog 部分呈现如下输出:

 <form method="post" id="frmAddNew" action="/Project/AddNew"> 
    <div class="fields-inline">         
       <div class="editor-label">             
          <label for="Name">Name</label>         
       </div>         

       <div class="editor-field">
          <input data-val="true" data-val-required="The Name field is required." id="Name" name="ko_unique_41" value="" type="text">
          <span class="field-validation-valid" data-valmsg-for="Name" data-valmsg-replace="true"></span>
       </div>
    </div>
    <span id="validationmessage" class="field-validation-error"></span>   
  </form>

但是,当我调用$("#frmAddNew").valid()) 时,它总是返回“true”。 我不知道是它的淘汰赛、jQuery 还是 mvc 阻止了验证返回 false。

【问题讨论】:

  • 你试过不用knockoutjs用它来看看验证是否有效吗?
  • 嗨,快速测试显示,当不在 内时,相同的渲染 html 工作。验证似乎在它们内部被破坏了。我需要这个 ko 和模板,所以不知道如何解决这个问题......

标签: jquery jquery-ui asp.net-mvc-3 knockout.js


【解决方案1】:

尝试调用$.validator.unobtrusive.parse(yourFormElement) 以获取与验证相关的data- 属性解析。

你可以像这样触发它:

<div id="dlgAdd" data-bind="template: { name: 'editTemplate', data: selected, afterRender: hookUpValidation  }">
</div>

那么,hookUpValidation 将如下所示:

hookUpValidation: function(nodes) {
    $.validator.unobtrusive.parse(nodes[0]);
}

【讨论】:

  • 嗨,我试过了,但运气不好。只有当我将 class="required" 显式添加到标记中时,它似乎才有效,但 MVC3 呈现模型,因此标记包含数据注释属性,以便使用 'data-val-required'。为什么它适用于“必需”而不适用于“data-val-required”?
  • OK- 我认为问题可能是您的表单被包装在一个 div 中,而我列出的节点 [0] 就是那个 div。您需要在表格上致电$.validator.unobtrusive.parse。试试看:$.validator.unobtrusive.parse($("form", nodes[0]));。这是一个使用与 MVC3 相同的脚本的示例:jsfiddle.net/rniemeyer/UtvPS
  • @Jon - 只是好奇您是否找到了有效的解决方案和/或在上一条评论之后您是否仍有问题。
  • 我刚刚把它搁置了,我有机会重新访问它。会让你知道我是怎么过的。再次感谢。
  • 我的表单验证工作如你所说,但我这样称呼它:hookupValidation: function(nodes) { $.validator.unobtrusive.parse($("#frmAdd")); },
【解决方案2】:

我查看了 jQuery validate 的代码,我认为它不适用于动态添加的表单(Knockout 所做的)。

看看这个>Jquery Validation Plugin, dynamic form validation

您需要在使用 jQuery live() 方法注册的事件处理程序中调用 validate() 方法。 live 方法也链接到所有动态添加的元素。

让我知道它是否有效。

【讨论】:

  • 嗯,我必须使用“鼠标悬停”事件来执行此操作似乎很奇怪。没有其他解决方法吗?我希望验证功能可以与 jquery 模板一起使用。
  • 我认为这与鼠标悬停事件无关,而是与 live() 方法有关。您必须在表单的提交事件中调用 validate() 函数。事件是否使用 jQuery.live() 方法注册?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多