我必须在输入字段(在输入事件中)手动将插入位置设置为0。我需要支持> = IE9。即使在IE9中,只要我正常输入(按下键盘上的键),这也能正常工作。但是一旦我使用复制和粘贴,插入符号就不会设置到所需的位置(0)。
重现的步骤:
小提琴: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)
答案 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);
}
});
要仍然可以通过键盘选择文字,您必须排除某些键。
好吧,如果用户使用鼠标和上下文菜单粘贴文本,这仍然不起作用。很高兴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。