我创建了一个包含两个元素的简单表单,我正在尝试配置jquery验证,以便在单击按钮时验证元素。这是一个普通按钮,而不是提交的按钮。
我已经在Visual Studio中的一个空白mvc项目中启动了这个,并确保我有以下库包含
query.js
jquery-ui.js
jquery.validate.js
bootstrap.css
bootstrap.js
我创建的表单只有两个输入控件和一个按钮
<form role="form" class="form-horizontal" id="formtextmatch">
<fieldset>
<div class="form-group">
<label for="text" class="col-sm-3 control-label">Text</label>
<div class="col-sm-9">
<textarea required id="text" name="text"
class="form-control has-error" rows="5"
placeholder="enter text to search for"></textarea>
</div>
</div>
<div class="form-group">
<label for="subtext" class="col-sm-3 control-label">Subtext</label>
<div class="col-sm-9">
<input required type="text" id="subtext" name="subtext"
class="form-control" value="Polly"
placeholder="enter subtext to search for" />
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-9">
<input type="button" id="GetCount" name="GetCount"
value="Get Count" class="btn btn-default" />
</div>
</div>
</fieldset>
</form>
我有以下脚本:
$(document).ready(function() {
$("#formtextmatch").validate({
rules: {
text: "required",
subtext: "required"
},
messages: {
text: "Text is required",
subtext: "Subtext is required"
},
errorPlacement: function(error, element) {
error.insertAfter('.form-group');
},
highlight: function(element) {
$(element).closest('.form-group').addClass('has-error');
},
unhighlight: function(element) {
$(element).closest('.form-group').removeClass('has-error');
}
});
});
我正在设置将两个文本框设置为必填字段,并显示错误消息,然后设置css以指示控件无效的错误
现在我在按钮上点击一个非常简单的脚本来验证表格
$("#GetCount").click(function() {
if (!$("#formtextmatch").valid()) {
alert('form is invalid');
return;
}
});
但是,当我单击表单上的按钮时,似乎没有执行验证。
我希望为此http://jsfiddle.net/DarrenGuy/0ttwzgss/
创造一个小提琴我尝试添加属性&#34; required&#34;在html元素上,但这似乎也不起作用,我也将按钮单击更改为validate(),但是研究表明你应该使用valid()而不是validate()来点击按钮
我相信我已经正确设置了所有内容,但由于验证无效,我希望我错过了一些非常简单和基本的表单来使验证工作。
更新: 我被告知小提琴有效,所以问题必定在我项目中我做错了。
这是我配置的捆绑包
public static void RegisterBundles(BundleCollection bundles)
{
bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
"~/Scripts/jquery-{version}.js"));
bundles.Add(new ScriptBundle("~/bundles/jqueryui").Include(
"~/Scripts/jquery-ui-{version}.js",
"~/Scripts/blockUI.js"));
bundles.Add(new ScriptBundle("~/bundles/jqueryval").Include(
"~/Scripts/jquery.validate*"));
bundles.Add(new ScriptBundle("~/bundles/toastr").Include(
"~/Scripts/toastr.js"));
bundles.Add(new ScriptBundle("~/bundles/modernizr").Include(
"~/Scripts/modernizr-*"));
bundles.Add(new ScriptBundle("~/bundles/bootstrap").Include(
"~/Scripts/bootstrap.js",
"~/Scripts/respond.js"));
bundles.Add(new StyleBundle("~/Content/css").Include(
"~/Content/bootstrap.css",
"~/Content/site.css",
"~/Content/toastr.css"
));
BundleTable.EnableOptimizations = true;
}
}
这是_Layout.cshtml文件的完整html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>@ViewBag.Title - Test for eviivo</title>
@Styles.Render("~/Content/css")
@Scripts.Render("~/bundles/modernizr")
</head>
<body>
<div class="navbar navbar-inverse navbar-fixed-top">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle"
data-toggle="collapse" data-target=".navbar-collapse">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
</div>
<div class="navbar-collapse collapse">
<ul class="nav navbar-nav">
<li>@Html.ActionLink("Home", "Index", "Home")</li>
</ul>
</div>
</div>
</div>
<div class="container body-content">
@RenderBody()
<hr />
<footer>
</footer>
</div>
@Scripts.Render("~/bundles/jquery")
@Scripts.Render("~/bundles/jqueryui")
@Scripts.Render("~/bundles/jqueryval")
@Scripts.Render("~/bundles/bootstrap")
@Scripts.Render("~/bundles/toastr")
@RenderSection("scripts", required: false)
</body>
</html>
这是我的index.cshtml文件中的完整html
@{
ViewBag.Title = "Home Page";
}
<form role="form" class="form-horizontal" id="formtextmatch">
<fieldset>
<div class="form-group">
<label for="text" class="col-sm-3 control-label">Text</label>
<div class="col-sm-9">
<textarea required id="text" name="text"
class="form-control has-error" rows="5"
placeholder="enter text to search for"></textarea>
</div>
</div>
<div class="form-group">
<label for="subtext" class="col-sm-3 control-label">Subtext</label>
<div class="col-sm-9">
<input required type="text" id="subtext" name="subtext"
class="form-control" placeholder="enter subtext to search for" />
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-9">
<input type="button" id="GetCount" name="GetCount"
value="Get Count" class="btn btn-default" />
</div>
</div>
<div class="form-group">
<label for="results" class="col-sm-3 control-label">
Subtext has been found at position
</label>
<div class="col-sm-9">
<p class="form-control-static" id="results">
Click Get Count for results</p>
</div>
</div>
</fieldset>
</form>
@section scripts
{
<script language="javascript">
$(document).ready(function() {
$("#formtextmatch").validate({
rules: {
text: "required",
subtext: "required"
},
messages: {
text: "Text is required",
subtext: "Subtext is required"
},
errorPlacement: function(error, element) {
error.insertAfter('.form-group');
},
highlight: function(element) {
$(element).closest('.form-group').addClass('has-error');
},
unhighlight: function(element) {
$(element).closest('.form-group').removeClass('has-error');
}
});
});
$("#GetCount").click(function() {
toastr.options = {
"debug": false,
"positionClass": "toast-bottom-right",
"onclick": null,
"fadeIn": 300,
"fadeOut": 1000,
"timeOut": 5000,
"extendedTimeOut": 1000
};
if (!$("#formtextmatch").valid()) {
toastr.error("Ensure that the text and subtext values are supplied");
return;
}
$.blockUI({
message: '<p>Please wait</br>while query is being executed...</p>'
});
var textValue = $("#text").val();
var subtextValue = $("#subtext").val();
$.ajax({
url: '/api/findstrings/',
type: 'GET',
contentType: 'application/json',
data: {
text: textValue,
subtext: subtextValue
}
})
.done(function(data) {
if (data.length == 0)
$("#results").html("There is no output");
else
$("#results").text(data);
})
.fail(function(xhr, textStatus, errorThrown) {
toastr.error(textStatus);
toastr.error(errorThrown);
})
.always(function() {
$.unblockUI();
toastr.info('Search complete');
});
});
</script>
}
使用此代码,会弹出toastr,但未正确设置控件css以指示错误,或显示验证规则中定义的错误消息