html 修改输入为数字,HTML5输入类型=数字更改步骤行为

Rafik Tighil..

5

好吧,首先感谢您提出这个非常有趣的问题。通过搜索问题的解决方案,我已经学到了很多有关HTML5验证的知识。

我的研究使我发现HTML5表单验证API具有一组有趣的属性,这些属性是只读的,但是对完成您想做的事情非常有用。

我对您的问题的解决方法是先将novalidate属性添加到form元素,以便我可以控制何时触发验证,然后读取validity附加到输入的对象,这样我才能确切知道那里存在哪些验证错误,以及是否知道唯一的错误是stepMismatch(这是引发数字无效(例如199)的原因),我可以绕过所有验证过程。另外,我可以使用reportValidity()方法显示正常的HTML验证行为。

这是我想出的代码,希望您能做得到:

var form = document.querySelector("form") // Get the form

var input = document.querySelector("#myInput") // Get the input to validate

form.addEventListener("submit", function(e) {

e.preventDefault() // Catch the submit

// Do the magic

if(onlyStepMatters(input.validity)){

form.submit()

}else {

form.reportValidity()

}

})

function onlyStepMatters(validityState) {

return !(

validityState.badInput || validityState.customError || validityState. patternMismatch || validityState.rangeOverflow || validityState.rangeUnderflow || validityState.tooLong || validityState.tooShort || validityState.typeMismatch || validityState.valueMissing

)

/* This is what the object looks like, notice I just skipped the stepMismatch */

/*

{

badInput,

customError,

patternMismatch,

rangeOverflow,

rangeUnderflow,

stepMismatch,

tooLong,

tooShort,

typeMismatch,

valid,

valueMissing,

}

*/

}

Send

我很确定可以基于相同的逻辑来重构此代码并使其更加简洁,但是我没有足够的时间来思考它。

任何建设性的意见将不胜感激。

希望这可以帮助。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值