input.wxml 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  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}}__wrap--prefix">
  11. <view class="{{classPrefix}}__icon--prefix">
  12. <slot name="prefix-icon" />
  13. <template
  14. wx:if="{{_prefixIcon}}"
  15. is="icon"
  16. data="{{tClass: prefix + '-class-prefix-icon', ariaHidden: true, ..._prefixIcon}}"
  17. />
  18. </view>
  19. <view class="{{classPrefix}}__label {{prefix}}-class-label" aria-hidden>
  20. <slot name="label" />
  21. <block wx:if="{{label}}">{{label}}</block>
  22. </view>
  23. </view>
  24. <view class="{{classPrefix}}__wrap">
  25. <view class="{{classPrefix}}__content {{classPrefix}}--{{status}}">
  26. <input
  27. class="{{_this.getInputClass(classPrefix, suffix, align, disabled)}} {{prefix}}-class-input"
  28. maxlength="{{allowInputOverMax ? -1 : maxlength}}"
  29. disabled="{{disabled || readonly}}"
  30. placeholder="{{placeholder}}"
  31. placeholder-style="{{placeholderStyle}}"
  32. placeholder-class="{{_.cls(classPrefix + '__placeholder', [['disabled', disabled]])}} {{placeholderClass}}"
  33. value="{{value}}"
  34. password="{{type === 'password'}}"
  35. type="{{type === 'password' ? 'text' : type}}"
  36. focus="{{focus}}"
  37. confirm-type="{{confirmType}}"
  38. confirm-hold="{{confirmHold}}"
  39. cursor="{{cursor}}"
  40. cursor-color="{{cursorColor}}"
  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. aria-role="textbox"
  55. aria-label="{{label}}"
  56. aria-roledescription="{{label}}"
  57. bindinput="onInput"
  58. bindfocus="onFocus"
  59. bindblur="onBlur"
  60. bindconfirm="onConfirm"
  61. bindkeyboardheightchange="onKeyboardHeightChange"
  62. bindnicknamereview="onNickNameReview"
  63. />
  64. <!--
  65. 这里aria-role="textbox"和aria-label组合使用实现ios的聚合焦点播报效果。
  66. ios会播报aria-label,不会重复播报aria-roledescription的内容;
  67. 安卓不会播报aria-label,会播报aria-roledescription的内容
  68. -->
  69. <view
  70. wx:if="{{_clearIcon && value.length > 0 && showClearIcon}}"
  71. class="{{classPrefix}}__wrap--clearable-icon"
  72. bind:tap="clearInput"
  73. >
  74. <template
  75. is="icon"
  76. data="{{tClass: prefix + '-class-clearable', ariaRole: 'button', ariaLabel: '清除', ..._clearIcon }}"
  77. />
  78. </view>
  79. <view class="{{classPrefix}}__wrap--suffix {{prefix}}-class-suffix" bind:tap="onSuffixClick">
  80. <text wx:if="{{suffix}}">{{suffix}}</text>
  81. <slot name="suffix" />
  82. </view>
  83. <view class="{{classPrefix}}__wrap--suffix-icon" bind:tap="onSuffixIconClick">
  84. <slot name="suffix-icon" />
  85. <template
  86. wx:if="{{_suffixIcon}}"
  87. is="icon"
  88. data="{{tClass: prefix + '-class-suffix-icon', ariaRole: 'button', ..._suffixIcon }}"
  89. />
  90. </view>
  91. </view>
  92. <view
  93. wx:if="{{tips && tips.length > 0}}"
  94. class="{{classPrefix}}__tips {{classPrefix}}--{{align}} {{prefix}}-class-tips"
  95. >{{tips}}
  96. </view>
  97. <slot name="tips" />
  98. </view>
  99. </view>