[improvement] NumberKeyboard: improve accessibility

This commit is contained in:
陈嘉涵 2019-05-25 16:33:35 +08:00
parent 2c275fd98b
commit 1821889f01
16 changed files with 85 additions and 81 deletions

View File

@ -13,6 +13,7 @@
- Switch - Switch
- NoticeBar - NoticeBar
- GoodsAction - GoodsAction
- NumberKeyboard
##### ImagePreview ##### ImagePreview

View File

@ -34,8 +34,8 @@ exports[`create a AddressEdit 1`] = `
<div name="van-popup-slide-bottom" class="van-popup van-popup--bottom" style="display:none;"> <div name="van-popup-slide-bottom" class="van-popup van-popup--bottom" style="display:none;">
<div class="van-picker van-area"> <div class="van-picker van-area">
<div class="van-hairline--top-bottom van-picker__toolbar"> <div class="van-hairline--top-bottom van-picker__toolbar">
<div class="van-picker__cancel">取消</div> <div role="button" tabindex="0" class="van-picker__cancel">取消</div>
<div class="van-picker__confirm">确认</div> <div role="button" tabindex="0" class="van-picker__confirm">确认</div>
</div> </div>
<div class="van-loading van-loading--circular van-picker__loading"><span class="van-loading__spinner van-loading__spinner--circular" style="color:#1989fa;"><svg viewBox="25 25 50 50" class="van-loading__circular"><circle cx="50" cy="50" r="20" fill="none"></circle></svg></span></div> <div class="van-loading van-loading--circular van-picker__loading"><span class="van-loading__spinner van-loading__spinner--circular" style="color:#1989fa;"><svg viewBox="25 25 50 50" class="van-loading__circular"><circle cx="50" cy="50" r="20" fill="none"></circle></svg></span></div>
<div class="van-picker__columns" style="height:220px;"> <div class="van-picker__columns" style="height:220px;">
@ -104,8 +104,8 @@ exports[`create a AddressEdit with props 1`] = `
<div name="van-popup-slide-bottom" class="van-popup van-popup--bottom" style="display:none;"> <div name="van-popup-slide-bottom" class="van-popup van-popup--bottom" style="display:none;">
<div class="van-picker van-area"> <div class="van-picker van-area">
<div class="van-hairline--top-bottom van-picker__toolbar"> <div class="van-hairline--top-bottom van-picker__toolbar">
<div class="van-picker__cancel">取消</div> <div role="button" tabindex="0" class="van-picker__cancel">取消</div>
<div class="van-picker__confirm">确认</div> <div role="button" tabindex="0" class="van-picker__confirm">确认</div>
</div> </div>
<!----> <!---->
<div class="van-picker__columns" style="height:220px;"> <div class="van-picker__columns" style="height:220px;">

View File

@ -5,8 +5,8 @@ exports[`renders demo correctly 1`] = `
<div> <div>
<div class="van-picker van-area"> <div class="van-picker van-area">
<div class="van-hairline--top-bottom van-picker__toolbar"> <div class="van-hairline--top-bottom van-picker__toolbar">
<div class="van-picker__cancel">取消</div> <div role="button" tabindex="0" class="van-picker__cancel">取消</div>
<div class="van-picker__confirm">确认</div> <div role="button" tabindex="0" class="van-picker__confirm">确认</div>
</div> </div>
<!----> <!---->
<div class="van-picker__columns" style="height: 220px;"> <div class="van-picker__columns" style="height: 220px;">
@ -82,8 +82,8 @@ exports[`renders demo correctly 1`] = `
<div> <div>
<div class="van-picker van-area"> <div class="van-picker van-area">
<div class="van-hairline--top-bottom van-picker__toolbar"> <div class="van-hairline--top-bottom van-picker__toolbar">
<div class="van-picker__cancel">取消</div> <div role="button" tabindex="0" class="van-picker__cancel">取消</div>
<div class="van-picker__confirm">确认</div> <div role="button" tabindex="0" class="van-picker__confirm">确认</div>
</div> </div>
<!----> <!---->
<div class="van-picker__columns" style="height: 220px;"> <div class="van-picker__columns" style="height: 220px;">
@ -164,9 +164,9 @@ exports[`renders demo correctly 1`] = `
<div> <div>
<div class="van-picker van-area"> <div class="van-picker van-area">
<div class="van-hairline--top-bottom van-picker__toolbar"> <div class="van-hairline--top-bottom van-picker__toolbar">
<div class="van-picker__cancel">取消</div> <div role="button" tabindex="0" class="van-picker__cancel">取消</div>
<div class="van-ellipsis van-picker__title">标题</div> <div class="van-ellipsis van-picker__title">标题</div>
<div class="van-picker__confirm">确认</div> <div role="button" tabindex="0" class="van-picker__confirm">确认</div>
</div> </div>
<!----> <!---->
<div class="van-picker__columns" style="height: 220px;"> <div class="van-picker__columns" style="height: 220px;">

View File

@ -3,8 +3,8 @@
exports[`change option 1`] = ` exports[`change option 1`] = `
<div class="van-picker van-area"> <div class="van-picker van-area">
<div class="van-hairline--top-bottom van-picker__toolbar"> <div class="van-hairline--top-bottom van-picker__toolbar">
<div class="van-picker__cancel">取消</div> <div role="button" tabindex="0" class="van-picker__cancel">取消</div>
<div class="van-picker__confirm">确认</div> <div role="button" tabindex="0" class="van-picker__confirm">确认</div>
</div> </div>
<!----> <!---->
<div class="van-picker__columns" style="height: 220px;"> <div class="van-picker__columns" style="height: 220px;">
@ -35,8 +35,8 @@ exports[`change option 1`] = `
exports[`change option 2`] = ` exports[`change option 2`] = `
<div class="van-picker van-area"> <div class="van-picker van-area">
<div class="van-hairline--top-bottom van-picker__toolbar"> <div class="van-hairline--top-bottom van-picker__toolbar">
<div class="van-picker__cancel">取消</div> <div role="button" tabindex="0" class="van-picker__cancel">取消</div>
<div class="van-picker__confirm">确认</div> <div role="button" tabindex="0" class="van-picker__confirm">确认</div>
</div> </div>
<!----> <!---->
<div class="van-picker__columns" style="height: 220px;"> <div class="van-picker__columns" style="height: 220px;">
@ -67,8 +67,8 @@ exports[`change option 2`] = `
exports[`change option 3`] = ` exports[`change option 3`] = `
<div class="van-picker van-area"> <div class="van-picker van-area">
<div class="van-hairline--top-bottom van-picker__toolbar"> <div class="van-hairline--top-bottom van-picker__toolbar">
<div class="van-picker__cancel">取消</div> <div role="button" tabindex="0" class="van-picker__cancel">取消</div>
<div class="van-picker__confirm">确认</div> <div role="button" tabindex="0" class="van-picker__confirm">确认</div>
</div> </div>
<!----> <!---->
<div class="van-picker__columns" style="height: 220px;"> <div class="van-picker__columns" style="height: 220px;">
@ -99,8 +99,8 @@ exports[`change option 3`] = `
exports[`reset method 1`] = ` exports[`reset method 1`] = `
<div class="van-picker van-area"> <div class="van-picker van-area">
<div class="van-hairline--top-bottom van-picker__toolbar"> <div class="van-hairline--top-bottom van-picker__toolbar">
<div class="van-picker__cancel">取消</div> <div role="button" tabindex="0" class="van-picker__cancel">取消</div>
<div class="van-picker__confirm">确认</div> <div role="button" tabindex="0" class="van-picker__confirm">确认</div>
</div> </div>
<!----> <!---->
<div class="van-picker__columns" style="height: 220px;"> <div class="van-picker__columns" style="height: 220px;">
@ -130,8 +130,8 @@ exports[`reset method 1`] = `
exports[`reset method 2`] = ` exports[`reset method 2`] = `
<div class="van-picker van-area"> <div class="van-picker van-area">
<div class="van-hairline--top-bottom van-picker__toolbar"> <div class="van-hairline--top-bottom van-picker__toolbar">
<div class="van-picker__cancel">取消</div> <div role="button" tabindex="0" class="van-picker__cancel">取消</div>
<div class="van-picker__confirm">确认</div> <div role="button" tabindex="0" class="van-picker__confirm">确认</div>
</div> </div>
<!----> <!---->
<div class="van-picker__columns" style="height: 220px;"> <div class="van-picker__columns" style="height: 220px;">
@ -162,8 +162,8 @@ exports[`reset method 2`] = `
exports[`watch areaList & code 1`] = ` exports[`watch areaList & code 1`] = `
<div class="van-picker van-area"> <div class="van-picker van-area">
<div class="van-hairline--top-bottom van-picker__toolbar"> <div class="van-hairline--top-bottom van-picker__toolbar">
<div class="van-picker__cancel">取消</div> <div role="button" tabindex="0" class="van-picker__cancel">取消</div>
<div class="van-picker__confirm">确认</div> <div role="button" tabindex="0" class="van-picker__confirm">确认</div>
</div> </div>
<!----> <!---->
<div class="van-picker__columns" style="height: 220px;"> <div class="van-picker__columns" style="height: 220px;">
@ -194,8 +194,8 @@ exports[`watch areaList & code 1`] = `
exports[`watch areaList & code 2`] = ` exports[`watch areaList & code 2`] = `
<div class="van-picker van-area"> <div class="van-picker van-area">
<div class="van-hairline--top-bottom van-picker__toolbar"> <div class="van-hairline--top-bottom van-picker__toolbar">
<div class="van-picker__cancel">取消</div> <div role="button" tabindex="0" class="van-picker__cancel">取消</div>
<div class="van-picker__confirm">确认</div> <div role="button" tabindex="0" class="van-picker__confirm">确认</div>
</div> </div>
<!----> <!---->
<div class="van-picker__columns" style="height: 220px;"> <div class="van-picker__columns" style="height: 220px;">
@ -226,8 +226,8 @@ exports[`watch areaList & code 2`] = `
exports[`watch areaList & code 3`] = ` exports[`watch areaList & code 3`] = `
<div class="van-picker van-area"> <div class="van-picker van-area">
<div class="van-hairline--top-bottom van-picker__toolbar"> <div class="van-hairline--top-bottom van-picker__toolbar">
<div class="van-picker__cancel">取消</div> <div role="button" tabindex="0" class="van-picker__cancel">取消</div>
<div class="van-picker__confirm">确认</div> <div role="button" tabindex="0" class="van-picker__confirm">确认</div>
</div> </div>
<!----> <!---->
<div class="van-picker__columns" style="height: 220px;"> <div class="van-picker__columns" style="height: 220px;">

View File

@ -5,8 +5,8 @@ exports[`renders demo correctly 1`] = `
<div> <div>
<div class="van-picker van-datetime-picker"> <div class="van-picker van-datetime-picker">
<div class="van-hairline--top-bottom van-picker__toolbar"> <div class="van-hairline--top-bottom van-picker__toolbar">
<div class="van-picker__cancel">取消</div> <div role="button" tabindex="0" class="van-picker__cancel">取消</div>
<div class="van-picker__confirm">确认</div> <div role="button" tabindex="0" class="van-picker__confirm">确认</div>
</div> </div>
<!----> <!---->
<div class="van-picker__columns" style="height: 220px;"> <div class="van-picker__columns" style="height: 220px;">
@ -167,8 +167,8 @@ exports[`renders demo correctly 1`] = `
<div> <div>
<div class="van-picker van-datetime-picker"> <div class="van-picker van-datetime-picker">
<div class="van-hairline--top-bottom van-picker__toolbar"> <div class="van-hairline--top-bottom van-picker__toolbar">
<div class="van-picker__cancel">取消</div> <div role="button" tabindex="0" class="van-picker__cancel">取消</div>
<div class="van-picker__confirm">确认</div> <div role="button" tabindex="0" class="van-picker__confirm">确认</div>
</div> </div>
<!----> <!---->
<div class="van-picker__columns" style="height: 220px;"> <div class="van-picker__columns" style="height: 220px;">
@ -247,8 +247,8 @@ exports[`renders demo correctly 1`] = `
<div> <div>
<div class="van-picker van-datetime-picker"> <div class="van-picker van-datetime-picker">
<div class="van-hairline--top-bottom van-picker__toolbar"> <div class="van-hairline--top-bottom van-picker__toolbar">
<div class="van-picker__cancel">取消</div> <div role="button" tabindex="0" class="van-picker__cancel">取消</div>
<div class="van-picker__confirm">确认</div> <div role="button" tabindex="0" class="van-picker__confirm">确认</div>
</div> </div>
<!----> <!---->
<div class="van-picker__columns" style="height: 220px;"> <div class="van-picker__columns" style="height: 220px;">
@ -292,8 +292,8 @@ exports[`renders demo correctly 1`] = `
<div> <div>
<div class="van-picker van-datetime-picker"> <div class="van-picker van-datetime-picker">
<div class="van-hairline--top-bottom van-picker__toolbar"> <div class="van-hairline--top-bottom van-picker__toolbar">
<div class="van-picker__cancel">取消</div> <div role="button" tabindex="0" class="van-picker__cancel">取消</div>
<div class="van-picker__confirm">确认</div> <div role="button" tabindex="0" class="van-picker__confirm">确认</div>
</div> </div>
<!----> <!---->
<div class="van-picker__columns" style="height: 220px;"> <div class="van-picker__columns" style="height: 220px;">
@ -384,8 +384,8 @@ exports[`renders demo correctly 1`] = `
<div> <div>
<div class="van-picker van-datetime-picker"> <div class="van-picker van-datetime-picker">
<div class="van-hairline--top-bottom van-picker__toolbar"> <div class="van-hairline--top-bottom van-picker__toolbar">
<div class="van-picker__cancel">取消</div> <div role="button" tabindex="0" class="van-picker__cancel">取消</div>
<div class="van-picker__confirm">确认</div> <div role="button" tabindex="0" class="van-picker__confirm">确认</div>
</div> </div>
<!----> <!---->
<div class="van-picker__columns" style="height: 220px;"> <div class="van-picker__columns" style="height: 220px;">

View File

@ -1,5 +1,4 @@
import { use } from '../utils'; import { use } from '../utils';
import { preventDefault } from '../utils/event';
const [sfc, bem] = use('key'); const [sfc, bem] = use('key');
@ -26,12 +25,14 @@ export default sfc({
methods: { methods: {
onFocus() { onFocus() {
this.active = true; this.active = true;
this.$emit('press', this.text);
}, },
onBlur(event) { onBlur(event) {
preventDefault(event, true);
this.active = false; this.active = false;
},
onClick() {
this.$emit('press', this.text);
} }
}, },
@ -39,7 +40,10 @@ export default sfc({
const { onBlur } = this; const { onBlur } = this;
return ( return (
<i <i
role="button"
tabindex="0"
class={['van-hairline', this.className]} class={['van-hairline', this.className]}
onClick={this.onClick}
onTouchstart={this.onFocus} onTouchstart={this.onFocus}
onTouchmove={onBlur} onTouchmove={onBlur}
onTouchend={onBlur} onTouchend={onBlur}

View File

@ -12,6 +12,7 @@
:show="keyboard === 'default'" :show="keyboard === 'default'"
:close-button-text="$t('close')" :close-button-text="$t('close')"
extra-key="." extra-key="."
safe-area-inset-bottom
@blur="keyboard = ''" @blur="keyboard = ''"
@input="onInput" @input="onInput"
@delete="onDelete" @delete="onDelete"
@ -31,6 +32,7 @@
:close-button-text="$t('close')" :close-button-text="$t('close')"
theme="custom" theme="custom"
extra-key="." extra-key="."
safe-area-inset-bottom
@blur="keyboard = ''" @blur="keyboard = ''"
@input="onInput" @input="onInput"
@delete="onDelete" @delete="onDelete"

View File

@ -100,7 +100,10 @@ export default sfc({
if (action !== this.handlerStatus && this.hideOnClickOutside) { if (action !== this.handlerStatus && this.hideOnClickOutside) {
this.handlerStatus = action; this.handlerStatus = action;
document.body[(action ? 'add' : 'remove') + 'EventListener']('touchstart', this.onBlur); document.body[(action ? 'add' : 'remove') + 'EventListener'](
'touchstart',
this.onBlur
);
} }
}, },
@ -139,6 +142,18 @@ export default sfc({
const showTitleClose = closeButtonText && theme === 'default'; const showTitleClose = closeButtonText && theme === 'default';
const showTitle = title || showTitleClose || titleLeftSlot; const showTitle = title || showTitleClose || titleLeftSlot;
const Title = showTitle && (
<div class={[bem('title'), 'van-hairline--top']}>
{titleLeftSlot && <span class={bem('title-left')}>{titleLeftSlot}</span>}
{title && <span>{title}</span>}
{showTitleClose && (
<span role="button" tabindex="0" class={bem('close')} onClick={this.onClose}>
{closeButtonText}
</span>
)}
</div>
);
return ( return (
<transition name={this.transition ? 'van-slide-up' : ''}> <transition name={this.transition ? 'van-slide-up' : ''}>
<div <div
@ -149,21 +164,7 @@ export default sfc({
onAnimationend={this.onAnimationEnd} onAnimationend={this.onAnimationEnd}
onWebkitAnimationEnd={this.onAnimationEnd} onWebkitAnimationEnd={this.onAnimationEnd}
> >
{showTitle && ( {Title}
<div class={[bem('title'), 'van-hairline--top']}>
{titleLeftSlot && (
<span class={bem('title-left')}>
{titleLeftSlot}
</span>
)}
{title && <span>{title}</span>}
{showTitleClose && (
<span class={bem('close')} onClick={this.onClose}>
{closeButtonText}
</span>
)}
</div>
)}
<div class={bem('body')}> <div class={bem('body')}>
{this.keys.map(key => ( {this.keys.map(key => (
<Key key={key.text} text={key.text} type={key.type} onPress={onPress} /> <Key key={key.text} text={key.text} type={key.type} onPress={onPress} />

View File

@ -99,6 +99,10 @@
&::after { &::after {
border-color: @number-keyboard-button-background-color; border-color: @number-keyboard-button-background-color;
} }
&:active {
background-color: darken(@number-keyboard-button-background-color, 10%);
}
} }
&--gray { &--gray {

View File

@ -5,17 +5,17 @@ exports[`renders demo correctly 1`] = `
<div><button class="van-button van-button--primary van-button--normal"><span class="van-button__text"> <div><button class="van-button van-button--primary van-button--normal"><span class="van-button__text">
弹出默认键盘 弹出默认键盘
</span></button> </span></button>
<div class="van-number-keyboard van-number-keyboard--default" style="z-index: 100;" name="van-slide-up"> <div class="van-number-keyboard van-number-keyboard--default van-number-keyboard--safe-area-inset-bottom" style="z-index: 100;" name="van-slide-up">
<div class="van-number-keyboard__title van-hairline--top"><span class="van-number-keyboard__close">完成</span></div> <div class="van-number-keyboard__title van-hairline--top"><span role="button" tabindex="0" class="van-number-keyboard__close">完成</span></div>
<div class="van-number-keyboard__body"><i class="van-hairline van-key">1</i><i class="van-hairline van-key">2</i><i class="van-hairline van-key">3</i><i class="van-hairline van-key">4</i><i class="van-hairline van-key">5</i><i class="van-hairline van-key">6</i><i class="van-hairline van-key">7</i><i class="van-hairline van-key">8</i><i class="van-hairline van-key">9</i><i class="van-hairline van-key van-key--gray">.</i><i class="van-hairline van-key">0</i><i class="van-hairline van-key van-key--gray van-key--delete">删除</i></div> <div class="van-number-keyboard__body"><i role="button" tabindex="0" class="van-hairline van-key">1</i><i role="button" tabindex="0" class="van-hairline van-key">2</i><i role="button" tabindex="0" class="van-hairline van-key">3</i><i role="button" tabindex="0" class="van-hairline van-key">4</i><i role="button" tabindex="0" class="van-hairline van-key">5</i><i role="button" tabindex="0" class="van-hairline van-key">6</i><i role="button" tabindex="0" class="van-hairline van-key">7</i><i role="button" tabindex="0" class="van-hairline van-key">8</i><i role="button" tabindex="0" class="van-hairline van-key">9</i><i role="button" tabindex="0" class="van-hairline van-key van-key--gray">.</i><i role="button" tabindex="0" class="van-hairline van-key">0</i><i role="button" tabindex="0" class="van-hairline van-key van-key--gray van-key--delete">删除</i></div>
</div> </div>
</div> </div>
<div><button class="van-button van-button--primary van-button--normal"><span class="van-button__text"> <div><button class="van-button van-button--primary van-button--normal"><span class="van-button__text">
弹出自定义键盘 弹出自定义键盘
</span></button> </span></button>
<div class="van-number-keyboard van-number-keyboard--custom" style="z-index: 100; display: none;" name="van-slide-up"> <div class="van-number-keyboard van-number-keyboard--custom van-number-keyboard--safe-area-inset-bottom" style="z-index: 100; display: none;" name="van-slide-up">
<div class="van-number-keyboard__body"><i class="van-hairline van-key">1</i><i class="van-hairline van-key">2</i><i class="van-hairline van-key">3</i><i class="van-hairline van-key">4</i><i class="van-hairline van-key">5</i><i class="van-hairline van-key">6</i><i class="van-hairline van-key">7</i><i class="van-hairline van-key">8</i><i class="van-hairline van-key">9</i><i class="van-hairline van-key van-key--middle">0</i><i class="van-hairline van-key">.</i></div> <div class="van-number-keyboard__body"><i role="button" tabindex="0" class="van-hairline van-key">1</i><i role="button" tabindex="0" class="van-hairline van-key">2</i><i role="button" tabindex="0" class="van-hairline van-key">3</i><i role="button" tabindex="0" class="van-hairline van-key">4</i><i role="button" tabindex="0" class="van-hairline van-key">5</i><i role="button" tabindex="0" class="van-hairline van-key">6</i><i role="button" tabindex="0" class="van-hairline van-key">7</i><i role="button" tabindex="0" class="van-hairline van-key">8</i><i role="button" tabindex="0" class="van-hairline van-key">9</i><i role="button" tabindex="0" class="van-hairline van-key van-key--middle">0</i><i role="button" tabindex="0" class="van-hairline van-key">.</i></div>
<div class="van-number-keyboard__sidebar"><i class="van-hairline van-key van-key--delete van-key--big van-key--gray">删除</i><i class="van-hairline van-key van-key--blue van-key--big">完成</i></div> <div class="van-number-keyboard__sidebar"><i role="button" tabindex="0" class="van-hairline van-key van-key--delete van-key--big van-key--gray">删除</i><i role="button" tabindex="0" class="van-hairline van-key van-key--blue van-key--big">完成</i></div>
</div> </div>
</div> </div>
</div> </div>

View File

@ -3,6 +3,6 @@
exports[`title-left slot 1`] = ` exports[`title-left slot 1`] = `
<div class="van-number-keyboard van-number-keyboard--default" style="z-index: 100;" name="van-slide-up"> <div class="van-number-keyboard van-number-keyboard--default" style="z-index: 100;" name="van-slide-up">
<div class="van-number-keyboard__title van-hairline--top"><span class="van-number-keyboard__title-left">Custom Title Left</span></div> <div class="van-number-keyboard__title van-hairline--top"><span class="van-number-keyboard__title-left">Custom Title Left</span></div>
<div class="van-number-keyboard__body"><i class="van-hairline van-key">1</i><i class="van-hairline van-key">2</i><i class="van-hairline van-key">3</i><i class="van-hairline van-key">4</i><i class="van-hairline van-key">5</i><i class="van-hairline van-key">6</i><i class="van-hairline van-key">7</i><i class="van-hairline van-key">8</i><i class="van-hairline van-key">9</i><i class="van-hairline van-key van-key--gray"></i><i class="van-hairline van-key">0</i><i class="van-hairline van-key van-key--gray van-key--delete">删除</i></div> <div class="van-number-keyboard__body"><i role="button" tabindex="0" class="van-hairline van-key">1</i><i role="button" tabindex="0" class="van-hairline van-key">2</i><i role="button" tabindex="0" class="van-hairline van-key">3</i><i role="button" tabindex="0" class="van-hairline van-key">4</i><i role="button" tabindex="0" class="van-hairline van-key">5</i><i role="button" tabindex="0" class="van-hairline van-key">6</i><i role="button" tabindex="0" class="van-hairline van-key">7</i><i role="button" tabindex="0" class="van-hairline van-key">8</i><i role="button" tabindex="0" class="van-hairline van-key">9</i><i role="button" tabindex="0" class="van-hairline van-key van-key--gray"></i><i role="button" tabindex="0" class="van-hairline van-key">0</i><i role="button" tabindex="0" class="van-hairline van-key van-key--gray van-key--delete">删除</i></div>
</div> </div>
`; `;

View File

@ -1,13 +1,6 @@
import NumberKeyboard from '..'; import NumberKeyboard from '..';
import { mount } from '../../../test/utils'; import { mount } from '../../../test/utils';
function mockTouch(wrapper, event, keyIndex) {
const key = wrapper.element.querySelectorAll('.van-key')[keyIndex];
const touchStart = document.createEvent('CustomEvent');
touchStart.initCustomEvent(event, true, true, {});
key.dispatchEvent(touchStart);
}
test('click number key', () => { test('click number key', () => {
const wrapper = mount(NumberKeyboard, { const wrapper = mount(NumberKeyboard, {
propsData: { propsData: {
@ -16,16 +9,15 @@ test('click number key', () => {
} }
}); });
mockTouch(wrapper, 'touchstart', 10); wrapper.findAll('.van-key').at(0).trigger('click');
mockTouch(wrapper, 'touchstart', 0);
mockTouch(wrapper, 'touchend', 0);
wrapper.destroy();
expect(wrapper.emitted('input')[0][0]).toEqual(1); expect(wrapper.emitted('input')[0][0]).toEqual(1);
wrapper.destroy();
}); });
it('click delete key', () => { it('click delete key', () => {
const wrapper = mount(NumberKeyboard); const wrapper = mount(NumberKeyboard);
mockTouch(wrapper, 'touchstart', 11); wrapper.findAll('.van-key').at(11).trigger('click');
expect(wrapper.emitted('delete')).toBeTruthy(); expect(wrapper.emitted('delete')).toBeTruthy();
}); });
@ -37,7 +29,7 @@ test('click close button', () => {
} }
}); });
mockTouch(wrapper, 'touchstart', 12); wrapper.findAll('.van-key').at(12).trigger('click');
expect(wrapper.emitted('close')).toBeTruthy(); expect(wrapper.emitted('close')).toBeTruthy();
}); });

View File

@ -15,7 +15,7 @@ exports[`renders demo correctly 1`] = `
<div class="van-password-input__info">密码为 6 位数字</div> <div class="van-password-input__info">密码为 6 位数字</div>
</div> </div>
<div class="van-number-keyboard van-number-keyboard--default" style="z-index: 100;" name="van-slide-up"> <div class="van-number-keyboard van-number-keyboard--default" style="z-index: 100;" name="van-slide-up">
<div class="van-number-keyboard__body"><i class="van-hairline van-key">1</i><i class="van-hairline van-key">2</i><i class="van-hairline van-key">3</i><i class="van-hairline van-key">4</i><i class="van-hairline van-key">5</i><i class="van-hairline van-key">6</i><i class="van-hairline van-key">7</i><i class="van-hairline van-key">8</i><i class="van-hairline van-key">9</i><i class="van-hairline van-key van-key--gray"></i><i class="van-hairline van-key">0</i><i class="van-hairline van-key van-key--gray van-key--delete">删除</i></div> <div class="van-number-keyboard__body"><i role="button" tabindex="0" class="van-hairline van-key">1</i><i role="button" tabindex="0" class="van-hairline van-key">2</i><i role="button" tabindex="0" class="van-hairline van-key">3</i><i role="button" tabindex="0" class="van-hairline van-key">4</i><i role="button" tabindex="0" class="van-hairline van-key">5</i><i role="button" tabindex="0" class="van-hairline van-key">6</i><i role="button" tabindex="0" class="van-hairline van-key">7</i><i role="button" tabindex="0" class="van-hairline van-key">8</i><i role="button" tabindex="0" class="van-hairline van-key">9</i><i role="button" tabindex="0" class="van-hairline van-key van-key--gray"></i><i role="button" tabindex="0" class="van-hairline van-key">0</i><i role="button" tabindex="0" class="van-hairline van-key van-key--gray van-key--delete">删除</i></div>
</div> </div>
</div> </div>
<div> <div>

View File

@ -159,14 +159,14 @@ export default sfc({
const Toolbar = this.showToolbar && ( const Toolbar = this.showToolbar && (
<div class={['van-hairline--top-bottom', bem('toolbar')]}> <div class={['van-hairline--top-bottom', bem('toolbar')]}>
{this.slots() || [ {this.slots() || [
<div class={bem('cancel')} onClick={this.onCancel}> <div role="button" tabindex="0" class={bem('cancel')} onClick={this.onCancel}>
{this.cancelButtonText || t('cancel')} {this.cancelButtonText || t('cancel')}
</div>, </div>,
this.slots('title') || this.slots('title') ||
(this.title && ( (this.title && (
<div class={['van-ellipsis', bem('title')]}>{this.title}</div> <div class={['van-ellipsis', bem('title')]}>{this.title}</div>
)), )),
<div class={bem('confirm')} onClick={this.onConfirm}> <div role="button" tabindex="0" class={bem('confirm')} onClick={this.onConfirm}>
{this.confirmButtonText || t('confirm')} {this.confirmButtonText || t('confirm')}
</div> </div>
]} ]}

View File

@ -41,9 +41,9 @@ exports[`renders demo correctly 1`] = `
<div> <div>
<div class="van-picker"> <div class="van-picker">
<div class="van-hairline--top-bottom van-picker__toolbar"> <div class="van-hairline--top-bottom van-picker__toolbar">
<div class="van-picker__cancel">取消</div> <div role="button" tabindex="0" class="van-picker__cancel">取消</div>
<div class="van-ellipsis van-picker__title">标题</div> <div class="van-ellipsis van-picker__title">标题</div>
<div class="van-picker__confirm">确认</div> <div role="button" tabindex="0" class="van-picker__confirm">确认</div>
</div> </div>
<!----> <!---->
<div class="van-picker__columns" style="height: 220px;"> <div class="van-picker__columns" style="height: 220px;">

View File

@ -31,7 +31,7 @@ exports[`column watch default index 2`] = `
exports[`render title slot 1`] = ` exports[`render title slot 1`] = `
<div class="van-picker"> <div class="van-picker">
<div class="van-hairline--top-bottom van-picker__toolbar"> <div class="van-hairline--top-bottom van-picker__toolbar">
<div class="van-picker__cancel">取消</div>Custom title<div class="van-picker__confirm">确认</div> <div role="button" tabindex="0" class="van-picker__cancel">取消</div>Custom title<div role="button" tabindex="0" class="van-picker__confirm">确认</div>
</div> </div>
<!----> <!---->
<div class="van-picker__columns" style="height: 220px;"> <div class="van-picker__columns" style="height: 220px;">