我在验证下面的表格时遇到问题。
主要问题是我必须使用"onfocusout"函数来验证输入。
根据单选选择,必须输入名称。
选择"value3"时,焦点设置为输入。
在输入端,如果用户尝试更改单选按钮,则会在更改单选按钮之前触发 onfocusout,在这种情况下,将显示错误,而不应更改错误有什么建议吗?
<form id="myform">
<input type="radio" name="radio" value="value1" /> value1
<input type="radio" name="radio" value="value2" /> value2
<input type="radio" name="radio" value="value3" /> value3
<input type="text" name="name" />
<input type="submit" />
</form>
js 代码是:
$("#myform").validate({
rules: {
name: {
required: {
depends: function () {
return $("input[name='radio']:checked").val() == "value3";
}
}
}
},
messages: {
name: {
required: "You must enter name"
}
},
onfocusout: function (element) {
this.element(element);
},
submitHandler: function (form) {
alert('success');
return false;
}
});
$("input[name='radio']").change(function () {
var value = $(this).val();
if (value == "value3") $("input[name='name']").focus();
else $("input[name='name']").valid();
});
JSFiddle: http://jsfiddle.net/954ros6L/
您调用.valid()
方法为时已晚。 只需在每次change
单选按钮时调用它,时间就会正确。
$("input[name='radio']").on('change', function () {
$("input[name='name']").valid(); // <- move it to here
var value = $(this).val();
if (value == "value3") {
$("input[name='name']").focus();
}
});
另外,如果您注意到,当字段无效时,验证消息现在会正确显示。
您也不需要自定义onfocusout
处理程序。
演示:http://jsfiddle.net/954ros6L/4/
旁注:
您不能在任何回调函数中使用event.preventDefault()
,因为event
不是该函数的有效参数。 此外,.preventDefault()
只是为了阻止event
的默认操作,比如在锚click
后停止页面跳转等......不是插件的默认行为。
更改onfocusout
的默认行为仅意味着您编写一个函数来覆盖插件的默认行为,您已经这样做了。
尝试使用以下方法来防止正常的事件处理程序
event.preventDefault();