IE9输入setSelectionRange()后粘贴不起作用

时间:2016-02-19 22:22:44

标签: javascript html css internet-explorer internet-explorer-9

我必须在输入字段(在输入事件中)手动将插入位置设置为0。我需要支持> = IE9。即使在IE9中,只要我正常输入(按下键盘上的键),这也能正常工作。但是一旦我使用复制和粘贴,插入符号就不会设置到所需的位置(0)。

重现的步骤:

  1. 在IE9模式下打开IE
  2. 在下面打开小提琴
  3. 输入输入字段(工作正常,插入符号设置为0)
  4. 将某些内容粘贴到输入字段中(失败,插入符号设置为粘贴文本的末尾)
  5. 小提琴:https://jsfiddle.net/wv61t7k5/7/

    代码

        class User(Base):
            __tablename__ = 'user'
            id = Column(Integer, primary_key=True)
            username = Column(String(30), nullable=False, unique=True, index=True)
    
            favorites = relationship("User", secondary='user_favorited',
                primaryjoin=UserFavorited.user_id==id,
                secondaryjoin=UserFavorited.favorite_user_id==id,
                backref=backref('favorites_list', lazy='dynamic', cascade='all,delete-orphan'),
                cascade="all",
                order_by=UserFavorited.favorited_on.desc())
    
            favorited_by = relationship("User", secondary='user_favorited',
                primaryjoin=UserFavorited.favorite_user_id==id,
                secondaryjoin=UserFavorited.user_id==id,
                backref=backref('favorited_list', lazy='dynamic', cascade='all,delete-orphan'),
                cascade="all",
                order_by=UserFavorited.favorited_on.desc())
    
    
       class UserFavorited(Base):
           __tablename__ = 'user_favorited'
           user_id = Column(Integer, ForeignKey('user.id'), primary_key=True)
           favorite_user_id = Column(Integer, ForeignKey('user.id'), primary_key=True, index=True)
           favorited_on = Column(DateTime(timezone=True), nullable=False)
    

1 个答案:

答案 0 :(得分:1)

有趣。首先我认为IE9可能不会在粘贴时触发事件,但确实如此。不知道为什么这不起作用。

但是,您可以使用keyup事件。这肯定不如使用input那么好,但可以在IE9中使用。

document.querySelector('input').addEventListener('keyup', function(e){
    if (e.key != 'Left' && e.key != 'Right' &&
      e.key != 'Shift' && e.key != 'Control') {
            this.setSelectionRange(0,0);
      }
});

要仍然可以通过键盘选择文字,您必须排除某些键。

这是updated Fiddle

更新

好吧,如果用户使用鼠标和上下文菜单粘贴文本,这仍然不起作用。很高兴IE知道paste事件。不幸的是,粘贴后事件没有,所以你最终会使用timeout

document.querySelector('input').addEventListener('input', function(e){
    this.setSelectionRange(0,0);
});
document.querySelector('input').addEventListener('paste', function() {
    var that = this;
    setTimeout(function() {
        that.setSelectionRange(0,0);
  }, 100);
});

这是Fiddle