vant icon indicating copy to clipboard operation
vant copied to clipboard

van-stepper 组件,设置min和max属性之后,输入不在范围内的数字,在onBlur时能否不自动修正

Open liubin595338764 opened this issue 3 years ago • 11 comments

这个功能解决了什么问题?

交互上尽量不改变用户输入的内容。

van-stepper 组件,设置min和max属性之后,输入不在范围内的数字,在onBlur时能否不主动修正。

尤其是用户输入完之后立马点击提交按钮,会提交修正后的数字,而不是用户自己输入的数字。

你期望的 API 是什么样子的?

<van-stepper :auto-correct="false" />

liubin595338764 avatar Sep 21 '22 01:09 liubin595338764

不太理解你这个需求点....,既然已经设置了minmax,为什么还能提交超过限制的数值呢?这样设置限制还有意义么。。(既设置了限制,又要求能超过限制...)

wjw-gavin avatar Sep 21 '22 02:09 wjw-gavin

@wjw-gavin 应该是不能提交的。 比如我设置了min:10, max:100, 当用户输入5的时候,离开输入框之后,van-stepper组件自动把5改成了10,变成合法的数字了,所以就可以提交了。 所以van-stepper组件不能去修复用户输入的数字

liubin595338764 avatar Sep 21 '22 02:09 liubin595338764

哦哦哦,这么一说我明白了,那回头看下作者怎么说...

wjw-gavin avatar Sep 21 '22 02:09 wjw-gavin

可以的,我们加个开关控制该行为

chenjiahan avatar Sep 22 '22 01:09 chenjiahan

@chenjiahan 感谢。 然后能不能把点击+-按钮步长的计算也优化下,点击+-按钮计算的结果是步长的整数倍。 比如我设置的步长是 5,输入框里面的7, 点击+按钮之后, 现在的效果是将输入框里面计算成12, 期望的效果是将输入框里面计算成15(5的整数倍,向上约位)

点击-按钮之后, 现在的效果是将输入框里面计算成2, 期望的效果是将输入框里面计算成5(5的整数倍,向上约位)

也将此行为加一个开关控制下。

liubin595338764 avatar Sep 22 '22 02:09 liubin595338764

@chenjiahan 感谢。 然后能不能把点击+-按钮步长的计算也优化下,点击+-按钮计算的结果是步长的整数倍。 比如我设置的步长是 5,输入框里面的7, 点击+按钮之后, 现在的效果是将输入框里面计算成12, 期望的效果是将输入框里面计算成15(5的整数倍,向上约位)

点击-按钮之后, 现在的效果是将输入框里面计算成2, 期望的效果是将输入框里面计算成5(5的整数倍,向上约位)

也将此行为加一个开关控制下。

我觉得这个在满足步长是 5 且结果是 5 的倍数的时候才成立吧? 你是理解为既然步长是5,那结果理应就是5的倍数是么

wjw-gavin avatar Sep 22 '22 03:09 wjw-gavin

@chenjiahan 是的。

既然步长是5,那结果理应就是5的倍数

或者vant-stepper还可以支持一个自定义函数,在每次vant-stepper的值发生变化时调用这个函数,函数的返回结果可以再覆盖vant-stepper的值,这样的话使用者就可以根据自己的业务逻辑来修正vant-stepper的值了。 这个函数接收两个参数:

/**
 * @param {String} value  vant-stepper组件改变后的值
 * @param {String} action  plus 点击+按钮触发, minus 点击-按钮触发, input 手动输入触发
 * @return {String} newval  函数执行后返回的值,填充到vant-stepper组件的输入框内

liubin595338764 avatar Sep 22 '22 07:09 liubin595338764

“既然步长是5,那结果理应就是5的倍数“,这个说法不太合理吧?

举个例子:如果拍卖会一件商品拍95w,但是每次加价不低于10w(如果每次都是10w),那结果也不是10的倍数哇?

wjw-gavin avatar Sep 22 '22 07:09 wjw-gavin

@wjw-gavin 你说的也对哈,我不是说所有的场景,所以这个是有开关配置的,开发者根据自己的业务场景去配置使用

liubin595338764 avatar Sep 22 '22 07:09 liubin595338764

@wjw-gavin 你说的也对哈,我不是说所有的场景,所以这个是有开关配置的,开发者根据自己的业务场景去配置使用

是有你这种场景,只是我觉得步长其实在跟倍数没什么关系的时候,这种情况可以自己来控制,比如自己写个方法来限制用户输入,亦或者在提交时提示用户输入数值是“5的倍数”,否则限制提交。

最后还是看作者评估一下 有没有必要吧,哈哈...

wjw-gavin avatar Sep 22 '22 08:09 wjw-gavin

我们对交互是这样认为的:

用户自己输入的内容,程序不主动修改,只是在离开焦点或提交的时候给用户提示。

用户点击+-按钮,因为是程序提供的功能,所以我们可以给用户自动修正到合法的值。

比如上面说的拍卖场景:拍卖会一件商品起拍95w,但是每次加价不低于10w。 如果用户输入的是80w,然后点击+按钮,只会计算到90w,但如果此时能把输入框的值修正到95w,就更合理一些。

也只是增加开关配置,强大现有组件的功能,原来的逻辑也不影响的。

liubin595338764 avatar Sep 22 '22 08:09 liubin595338764