代码之家  ›  专栏  ›  技术社区  ›  James Ives

将符号附加到导致值的输入结尾

  •  0
  • James Ives  · 技术社区  · 7 年前

    我有一个接受百分比的输入字段,但是我想告诉用户他们输入的值是百分比。

    我遇到的问题是我希望百分比引导文本,所以在输入中看起来如下: 100% 10000% ,但我不想 % 作为实际投入的一部分。

    % 值实际上并不调整输入中的位置。相反,它总是附加到输入字段的最末尾,而不是赶上输入。

    组件如下所示:

    class Input extends Component {
      constructor(props) {
        super(props);
    
        this.state = {
          isActive: false,
        }
      }
    
      render() {
        return (
        <div>
          <input 
            value={this.props.value} >
          </input>
        </div>
        )
      }
    }
    

    CSS:

    div {
      input:after {
        content: '%';
        position: absolute;
        top: 3.4rem;
        z-index: 9999;
        color: blue;
        font-size: 2rem;
    
      }
    }
    

    % 根据输入的长度动态移动。

    enter image description here

    enter image description here

    2 回复  |  直到 7 年前
        1
  •  3
  •   Arthur    7 年前

    在容器上使用data属性很容易(因为 input 无法处理 :before :after , [More here] content:attr()

    update = function(el) {
      el.parentElement.setAttribute('data-value', el.value)
    }
    div[data-value] {
      position: relative;
    }
    div[data-value]:after {
      content: attr(data-value) "%";
      position: absolute;
      top: 2px; /* Borders */
      left: 2px; /* Borders */
    }
    div[data-value] input {
      color: #FFF; /* Optional bug avoid visual bugs */
    }
    <div data-value="0.01">
      <input value="0.01" oninput="update(this)"/>
    </div>

    附言:我在香兰素上做过,但在React中很容易更新

        2
  •  -2
  •   Arthur    7 年前

    使用jQuery:

    $("#input").on("keyup", function(){
      $(this).val($(this).val().replace(/[^0-9]/gi, '') + '%')
    })
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <input id="input"/>

    如果您愿意,还可以将其转换为常规Javascript