twitter-bootstrap – Twitter Bootstrap typeahead和jQuery Validate

前端之家收集整理的这篇文章主要介绍了twitter-bootstrap – Twitter Bootstrap typeahead和jQuery Validate前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想在Twitter Bootstrap typeahead的文本输入字段上进行验证.所以我尝试按如下方式实现它.名称字段上的验证正常工作.如果您开始输入并再次清除该字段,则验证将启动.但是,在位置字段上,其上有data-provide =“typeahead”,这不会发生.但是,当您单击“提交”按钮时,确认会启动.

我试过调试它,但据我所知,Bootstrap和jQuery Validate都正确地注册了它们的事件处理程序.更奇怪的是,在验证之前安装了typeahead.所以人们会期望打破先行.但它不是……

index.html的:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <link rel="stylesheet" type="text/css" href="http://netdna.bootstrapcdn.com/twitter-bootstrap/2.1.0/css/bootstrap-combined.min.css" />
  5. <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.js"></script>
  6. <script type="text/javascript" src="http://ajax.aspnetcdn.com/ajax/jquery.validate/1.10.0/jquery.validate.js"></script>
  7. <script type="text/javascript" src="http://netdna.bootstrapcdn.com/twitter-bootstrap/2.1.0/js/bootstrap.js"></script>
  8. <script type="text/javascript">
  9. $(function() {
  10. $('[data-provide="typeahead"]').each(function() {
  11. var url = $(this).attr('data-url');
  12. $(this).typeahead({
  13. source : function(query,process) {
  14. return $.get(url,{
  15. name : query
  16. },function(data) {
  17. var json = JSON.parse(data);
  18. return process(json.locations);
  19. });
  20. },items : 5
  21. });
  22. });
  23. $('#settings-form').validate({
  24. rules: {
  25. name: {
  26. required: true
  27. },location: {
  28. required: true
  29. }
  30. },highlight: function(label) {
  31. var controlGroup = $(label).closest('.control-group');
  32. controlGroup.addClass('error');
  33. var buttons = controlGroup.find('button');
  34. buttons.addClass('btn-danger');
  35. buttons.attr('disabled','disabled');
  36. },success: function(label) {
  37. var controlGroup = $(label).closest('.control-group');
  38. controlGroup.removeClass('error');
  39. var buttons = controlGroup.find('button');
  40. buttons.removeClass('btn-danger');
  41. buttons.removeAttr('disabled');
  42. },errorPlacement: function(error,element) {
  43. error.appendTo(element.closest('.control-group'));
  44. }
  45. });
  46. });
  47. </script>
  48. <style type="text/css">
  49. body {
  50. margin: 20px;
  51. }
  52. label.error {
  53. margin-left: 160px;
  54. margin-bottom: 0;
  55. }
  56. </style>
  57. </head>
  58. <body>
  59. <form id="settings-form" class="form-horizontal" action="#" method="GET">
  60. <fieldset>
  61. <div class="control-group">
  62. <label class="control-label" for="name">Name</label>
  63. <div class="controls">
  64. <input type="text" id="name" name="name" autocomplete="off" />
  65. </div>
  66. </div>
  67. <div class="control-group">
  68. <label class="control-label" for="location">Location</label>
  69. <div class="controls">
  70. <input type="text" id="location" name="location" autocomplete="off" data-provide="typeahead" data-url="locations.json" />
  71. </div>
  72. </div>
  73. </fieldset>
  74. <div class="control-group">
  75. <div class="controls">
  76. <button class="btn" data-dismiss="modal">Cancel</button>
  77. <button class="btn btn-primary" type="submit">Save changes</button>
  78. </div>
  79. </div>
  80. </form>
  81. </body>
  82. </html>

locations.json:

  1. {
  2. "locations": [
  3. "Berlin","London","Madrid","New York","Paris"
  4. ]
  5. }

解决方法

是的 – 这是因为Twitter Bootstrap Typeahead在函数Typeahead.prototype.keyup()中通过e.stopPropagation()隐藏来自验证器的事件

将一个keyup-handler添加到#location以“手动”调用验证,以使其工作:

  1. <input type="text" id="location" name="location" autocomplete="off"
  2. data-provide="typeahead" onkeyup="$(this).validate();" data-url="locations.json" />

它不会改变行为/验证设置,只是简单地确保调用验证.

猜你在找的Bootstrap相关文章