如果条件满足,javascript强制下一个输入

如果条件满足,javascript强制下一个输入,javascript,jquery,validation,Javascript,Jquery,Validation,如果条件满足,我目前使用jQuery插件验证输入列,如果输入按钮达到最大输入,我使用下面的代码强制下一步 window.onload=function(){ var container = document.getElementsByClassName("container")[0]; container.onkeyup = function(e) { var target = e.srcElement; var maxLength = parse

如果条件满足,我目前使用jQuery插件验证输入列,如果输入按钮达到最大输入,我使用下面的代码强制下一步

window.onload=function(){
    var container = document.getElementsByClassName("container")[0];
    container.onkeyup = function(e) {
        var target = e.srcElement;
        var maxLength = parseInt(target.attributes["maxlength"].value, 10);
        var myLength = target.value.length;
        if (myLength >= maxLength) {
            var next = target;
            while (next = next.nextElementSibling) {
                if (next == null)
                    break;
                if (next.tagName.toLowerCase() == "input") {
                    next.focus();
                    break;
                }
            }
        }
    }
}
这是我的表格代码:

    <span class="label">Date:</span> <input type="text" id="f1" name="day" maxlength="2" placeholder="DD" /><br /><br />            
    <span class="label">Month:</span> <input type="text" id="f2" name="month" maxlength="2" placeholder="MM" /><br /><br />
    <span class="label">Year:</span> <input type="text" id="f3" name="year" maxlength="4" placeholder="YYYY" /><br /><br />
    <script type="text/javascript">
    //<![CDATA[
    // Validate day column:
    var f1 = new LiveValidation('f1');
    f1.add( Validate.Numericality, { minimum: 1, maximum: 31 } );
    // Validate month column:
    var f2 = new LiveValidation('f2');
    f2.add( Validate.Numericality, { minimum: 1, maximum: 12 } );
    // Validate year column:
    var f3 = new LiveValidation('f3');
    f3.add( Validate.Numericality, { minimum: 1940, maximum: 2021 } );
    //]]>
    </script>
日期:

月份:

年份:

//
我的问题是,例如,如果我输入的日期(f1)是无效的33,javascript将在monh(f2)输入旁边自动运行,以此类推

我的问题是:如果满足条件,是否可以将javascript更改为仅强制下一步?例如,如果输入的日期(f1)数据在1到31之间,则强制下一次输入;否则,如果数据超出范围,则强制下一次输入并清除(f1)输入框


请检查更新的小提琴:

/=maxLength){
var next=目标;
while(next=next.nextElementSibling){
if(next==null)
打破
if(next.tagName.toLowerCase()=“输入”){
next.focus();
打破
}
}
}
}
}
//验证日期列:
var f1=新的LiveValidation('f1'{
等等:750,
onValid:function(){
this.insertMessage(this.createMessageSpan());this.addFieldClass();
document.getElementById(“f2”).focus();
}
});
f1.添加(Validate.Numericality{
最低限额:1,
最高:31
});
//验证月份列:
变量f2=新的LiveValidation('f2'{
等等:750,
onValid:function(){
this.insertMessage(this.createMessageSpan());this.addFieldClass();
document.getElementById(“f3”).focus();
}
});
f2.添加(验证数值性、{
最低限额:1,
最多:12
});
//验证年份列:
var f3=新的LiveValidation('f3');
f3.添加(验证.数值性{
最低:1940,
最高限额:2021
});
//]]>

想法:正如文档中提到的,我们可以在onValid属性中定义对象并传递自定义函数。但有一个问题,LiveValidation在每次击键时都会触发onValid事件,如“12”中的“1”和“2”,因此还有一个更有用的选项称为“等待”,它以毫秒为单位设置为“750”,如果需要,您可以对其进行微调。

我不确定这段代码是否实际工作。你能提供一个像JSFIDLE这样的实例吗?请看@Milchepatren我在第一篇文章中添加了演示,但不知何故,接下来的输入力不起作用,但代码在我的本地主机中起作用。谢谢!它起作用了!只是一个问题,如果数据输入错误,是否可以清除输入框?例如(f2)允许1-12。如果用户输入14,那么在等待期之后,它将清除输入框。我认为是的,因为文档中提到的一个名为“onInvalid”的参数可用于完成清除输入字段的任务。它类似于上述注释中解释的onValid选项/事件。
//<![CDATA[ 
window.onload=function(){
    var container = document.getElementsByClassName("container")[0];
    container.onkeyup = function(e) {
        var target = e.srcElement;
        var maxLength = parseInt(target.attributes["maxlength"].value, 10);
        var myLength = target.value.length;
        if (myLength >= maxLength) {
            var next = target;
            while (next = next.nextElementSibling) {
                if (next == null)
                    break;
                if (next.tagName.toLowerCase() == "input") {
                    next.focus();
                    break;
                }
            }
        }
    }
}
// Validate day column:
var f1 = new LiveValidation('f1', {
    wait: 750,
    onValid: function() {
        this.insertMessage( this.createMessageSpan() ); this.addFieldClass();
        document.getElementById("f2").focus();
    }
});
f1.add(Validate.Numericality, {
    minimum: 1,
    maximum: 31
});
// Validate month column:
var f2 = new LiveValidation('f2', {
        wait: 750,
        onValid: function() {
            this.insertMessage( this.createMessageSpan() ); this.addFieldClass();
            document.getElementById("f3").focus();
        }
    });
f2.add(Validate.Numericality, {
    minimum: 1,
    maximum: 12
});
// Validate year column:
var f3 = new LiveValidation('f3');
f3.add(Validate.Numericality, {
    minimum: 1940,
    maximum: 2021
});
//]]>