简体   繁体   English

jquery-validator无法验证语义UI下拉列表

[英]jquery-validator cannot validate semantic-ui dropdowns

I am trying to use jquery-validator to validate a form that uses the semantic-ui dropdown() function to transform a select element into a searchable text box. 我正在尝试使用jquery-validator验证使用语义UI dropdown()函数将select元素转换为可搜索文本框的表单。 The issue I am having is jquery-validator doesn't notice that the select has been populated until after you click somewhere near the error message. 我遇到的问题是jquery-validator直到您单击错误消息附近的某个位置后,才注意到选择已被填充。 I think it should probably validate when the field changes or when it loses focus in addition to when there is a click. 我认为,除了单击时,它还应该验证字段何时更改或何时失去焦点。

 $(function() { $('#identifier').dropdown({ forceSelection: false }); $.validator.setDefaults({ debug: true, //jquery-validator has a panic attack about the search element not having a name tag. ignore: ".search", submitHandler: function() { //$.blockUI({message: '<div id="parent"><div id="loaderIcon" class="loader"></div><div id="loaderText" >Working on it....</div></div>'}); return false; } }); $("#ticketform").validate({ rules: { identifier: "required" }, messages: { identifier: "Please select an IP address" }, errorPlacement: function(error, element) { error.addClass("ui red pointing label transition"); error.insertAfter(element.closest('.ui.input')); }, highlight: function(element, errorClass, validClass) { alert("isError"); //$(element).parents(".row").addClass(errorClass); }, unhighlight: function(element, errorClass, validClass) { alert("isValid"); //$(element).parents(".row").removeClass(errorClass); } }); }); 
 <link href="https://cdnjs.cloudflare.com/ajax/libs/semantic-ui/2.2.13/semantic.min.css" rel="stylesheet"/> <script src="https://code.jquery.com/jquery-3.2.1.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.17.0/jquery.validate.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/semantic-ui/2.2.13/semantic.min.js"></script> <div class="ui grid sem"> <div class="four wide column"></div> <div class="eight wide column"> <div class="ui secondary segment"> <form id="ticketform" name="ticketform" action="open_ticket.php" method="post" class="ui grid form" style="padding: 10px"> <input type="hidden" name="action" value="submit"> <div class="row field"> <label class="six wide column" for="identifier">Please Select an IP address</label> <div class="eight wide column"> <div class="ui input"> <select name="identifier" class="ui fluid search selection dropdown" id="identifier"> <option value="" selected>Please choose...</option> <option value="4.4.4.4">4.4.4.4</option> <option value="8.8.8.8">8.8.8.8</option> </select> </div> </div> </div> <div class="row"> <label class="six wide column"></label> <div class="eight wide column"> <input id="button" type="submit" name="btnsubmit" value="Submit ticket" class="uibutton normal"> </div> </div> </form> </div> </div> </div> <div class="four wide column"></div> 

That's because the Semantic UI plugin is replacing the select with its own constructed element. 那是因为语义UI插件正在用自己的构造元素替换select Therefore the user is no longer interacting with something that the jQuery Validate plugin is watching. 因此,用户不再与jQuery Validate插件正在观看的内容进行交互。 When you click outside of the element however, you are triggering the Validate plugin's default onfocusout handler; 但是,当您在元素外部单击时,您将触发Validate插件的默认onfocusout处理函数。 the element is re-validated and error clears. 重新验证元素并清除错误。

The solution is to construct your own event handler that programmatically triggers validation whenever the select is changed. 解决方案是构造您自己的事件处理程序,该事件处理程序将在更改select时以编程方式触发验证。

$('[name="identifier"]').on('change', function() {
    $(this).valid(); // force validation
});

 $(function() { $('#identifier').dropdown({ forceSelection: false }); $.validator.setDefaults({ debug: true, //jquery-validator has a panic attack about the search element not having a name tag. ignore: ".search", submitHandler: function() { //$.blockUI({message: '<div id="parent"><div id="loaderIcon" class="loader"></div><div id="loaderText" >Working on it....</div></div>'}); return false; } }); $("#ticketform").validate({ rules: { identifier: "required" }, messages: { identifier: "Please select an IP address" }, errorPlacement: function(error, element) { error.addClass("ui red pointing label transition"); error.insertAfter(element.closest('.ui.input')); }, highlight: function(element, errorClass, validClass) { alert("isError"); //$(element).parents(".row").addClass(errorClass); }, unhighlight: function(element, errorClass, validClass) { alert("isValid"); //$(element).parents(".row").removeClass(errorClass); } }); $('[name="identifier"]').on('change', function() { $(this).valid(); // force validation }); }); 
 <link href="https://cdnjs.cloudflare.com/ajax/libs/semantic-ui/2.2.13/semantic.min.css" rel="stylesheet"/> <script src="https://code.jquery.com/jquery-3.2.1.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.17.0/jquery.validate.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/semantic-ui/2.2.13/semantic.min.js"></script> <div class="ui grid sem"> <div class="four wide column"></div> <div class="eight wide column"> <div class="ui secondary segment"> <form id="ticketform" name="ticketform" action="open_ticket.php" method="post" class="ui grid form" style="padding: 10px"> <input type="hidden" name="action" value="submit"> <div class="row field"> <label class="six wide column" for="identifier">Please Select an IP address</label> <div class="eight wide column"> <div class="ui input"> <select name="identifier" class="ui fluid search selection dropdown" id="identifier"> <option value="" selected>Please choose...</option> <option value="4.4.4.4">4.4.4.4</option> <option value="8.8.8.8">8.8.8.8</option> </select> </div> </div> </div> <div class="row"> <label class="six wide column"></label> <div class="eight wide column"> <input id="button" type="submit" name="btnsubmit" value="Submit ticket" class="uibutton normal"> </div> </div> </form> </div> </div> </div> <div class="four wide column"></div> 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM