input.wxml 3.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. <import src="../common/template/icon.wxml" />
  2. <wxs src="../common/utils.wxs" module="_" />
  3. <wxs src="./input.wxs" module="this" />
  4. <view
  5. style="{{_._style([style, customStyle])}}"
  6. class="{{_.cls(classPrefix, [['border', !borderless]])}} {{classPrefix}}--layout-{{layout}} class {{prefix}}-class"
  7. aria-describedby
  8. >
  9. <!-- aria-describedby用于关联该行设置了aria-hidden的元素最近的焦点,解决触发焦点过度上下偏移的问题 -->
  10. <view class="{{classPrefix}}__icon--prefix">
  11. <slot name="prefix-icon" />
  12. <template
  13. wx:if="{{_prefixIcon}}"
  14. is="icon"
  15. data="{{tClass: prefix + '-class-prefix-icon', ariaHidden: true, ..._prefixIcon}}"
  16. />
  17. </view>
  18. <view class="{{classPrefix}}__label" aria-hidden>
  19. <slot name="label" />
  20. <text wx:if="{{label}}" class="{{prefix}}-class-label">{{label}}</text>
  21. </view>
  22. <view class="{{classPrefix}}__wrap">
  23. <view class="{{classPrefix}}__content {{classPrefix}}--{{status}}">
  24. <input
  25. disabled="{{disabled}}"
  26. placeholder="{{placeholder}}"
  27. placeholder-style="{{placeholderStyle}}"
  28. placeholder-class="{{classPrefix}}__placeholder {{placeholderClass}}"
  29. value="{{value}}"
  30. bindinput="onInput"
  31. bindfocus="onFocus"
  32. bindblur="onBlur"
  33. bindconfirm="onConfirm"
  34. bind:keyboardheightchange="onKeyboardHeightChange"
  35. password="{{type === 'password'}}"
  36. type="{{type === 'password' ? 'text' : type}}"
  37. focus="{{focus}}"
  38. confirm-type="{{confirmType}}"
  39. confirm-hold="{{confirmHold}}"
  40. cursor="{{cursor}}"
  41. cursor-spacing="{{cursorSpacing}}"
  42. adjust-position="{{adjustPosition}}"
  43. auto-focus="{{autoFocus}}"
  44. always-embed="{{alwaysEmbed}}"
  45. selection-start="{{selectionStart}}"
  46. selection-end="{{selectionEnd}}"
  47. hold-keyboard="{{holdKeyboard}}"
  48. safe-password-cert-path="{{safePasswordCertPath}}"
  49. safe-password-length="{{safePasswordLength}}"
  50. safe-password-time-stamp="{{safePasswordTimeStamp}}"
  51. safe-password-nonce="{{safePasswordNonce}}"
  52. safe-password-salt="{{safePasswordSalt}}"
  53. safe-password-custom-hash="{{safePasswordCustomHash}}"
  54. class="{{this.getInputClass(classPrefix, suffix, align, disabled)}} {{prefix}}-class-input"
  55. aria-role="textbox"
  56. aria-label="{{label}}"
  57. aria-roledescription="{{label}}"
  58. />
  59. <!--
  60. 这里aria-role="textbox"和aria-label组合使用实现ios的聚合焦点播报效果。
  61. ios会播报aria-label,不会重复播报aria-roledescription的内容;
  62. 安卓不会播报aria-label,会播报aria-roledescription的内容
  63. -->
  64. <view
  65. wx:if="{{_clearIcon && value.length > 0}}"
  66. class="{{classPrefix}}__wrap--clearable-icon"
  67. bind:tap="clearInput"
  68. >
  69. <template
  70. is="icon"
  71. data="{{tClass: prefix + '-class-clearable', ariaRole: 'button', ariaLabel: '清除', ..._clearIcon }}"
  72. />
  73. </view>
  74. <view class="{{classPrefix}}__wrap--suffix {{prefix}}-class-suffix" bind:tap="onSuffixClick">
  75. <text wx:if="{{suffix}}">{{suffix}}</text>
  76. <slot name="suffix" />
  77. </view>
  78. <view class="{{classPrefix}}__wrap--suffix-icon" bind:tap="onSuffixIconClick">
  79. <slot name="suffix-icon" />
  80. <template
  81. wx:if="{{_suffixIcon}}"
  82. is="icon"
  83. data="{{tClass: prefix + '-class-suffix-icon', ariaRole: 'button', ..._suffixIcon }}"
  84. />
  85. </view>
  86. </view>
  87. <view wx:if="{{tips && tips.length > 0}}" class="{{classPrefix}}__tips {{prefix}}-class-tips">{{tips}} </view>
  88. <slot name="tips" />
  89. </view>
  90. </view>