防止验证聚焦,具体取决于单选按钮



我在验证下面的表格时遇到问题。
主要问题是我必须使用"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();

最新更新