I am using Twitter Bootstrap 3.1.1
with Parsley v2.0.0-rc3
. I made it mostly work apart from classHandler
option.
I have HTML like this:
<div class="form-group">
<label class="control-label" for="username">User Name</label>
<input class="form-control" id="username" name="username" required="" type="text" value="">
</div>
And run Parsley like this:
$("#register_form").parsley({
successClass: "has-success",
errorClass: "has-error",
classHandler: function(el) {
return $(el).closest(".form-group");
},
errorsWrapper: "<span class='help-block'></span>",
errorTemplate: "<span></span>"
});
Everything works fine, but success / error classes are applied to wrong element. After the page is loaded, I get this:
<div class="form-group">
<label class="control-label" for="username">User Name</label>
<input class="form-control" id="username" name="username" required="" type="text" value="" data-parsley-id="5043">
<span class="help-block" id="parsley-id-5043"></span>
</div>
And when validated, the result is this:
<div class="form-group">
<label class="control-label" for="username">User Name</label>
<input class="form-control has-error" id="username" name="username" required="" type="text" value="" data-parsley-id="5043">
<span class="help-block filled" id="parsley-id-5043">
<span class="parsley-required">This value is required.</span>
</span>
</div>
However, I expect something different:
<div class="form-group has-error">
<label class="control-label" for="username">User Name</label>
<input class="form-control" id="username" name="username" required="" type="text" value="" data-parsley-id="5043">
<span class="help-block filled" id="parsley-id-5043">
<span class="parsley-required">This value is required.</span>
</span>
</div>
I have verified using alert
that the function runs. But I am new to jQuery and JavaScript, so I do not know how to debug it any further and fix it.
You should try:
classHandler: function(el) {
return el.$element.closest(".form-group");
}
The el is an object from parsley (I have seen it using chrome dev console) and he has a $element field with the JQuery element :)
Full code working:
$("#register_form").parsley({
successClass: "has-success",
errorClass: "has-error",
classHandler: function(e) {
return e.$element.closest('.form-group');
},
errorsWrapper: "<span class='help-block'></span>",
errorTemplate: "<span></span>"
});
来源:https://stackoverflow.com/questions/22217735/getting-parsley-2-x-working-with-bootstrap-3-correctly