backbone.js:在呈现后将焦点设置为输入

ht4b089n  于 2022-11-10  发布在  其他
关注(0)|答案(3)|浏览(140)

我有一个有1个输入的模型。我还有一个集合。现在,当我向集合添加一个模型时,我希望将焦点设置到它的输入。准确地说,我需要将焦点设置到新创建的模型视图的输入。
然而,我似乎无法让它工作。下面是我的函数,它将模型的视图添加到集合视图中:

addOne: function(InvoiceItem) {
    var view = new InvoiceItemView({model: InvoiceItem});
    this.$('tr[data-id="'+InvoiceItem.get('after')+'"]').after(view.render().el);
    this.$('tr[data-id="'+InvoiceItem.cid+'"]').css('background', 'green');
    this.$('tr[data-id="'+InvoiceItem.cid+'"] input').focus();
},

问题是,第三个电话:this.$('tr[data-id="'+InvoiceItem.cid+'"] input').focus();什么都不做。这很奇怪,因为我似乎只能对根元素tr进行DOM操作,除此之外什么都不能做。
在我看来,jQuery似乎不知道元素存在,这很奇怪,因为当我执行alert(this.$('tr[data-id="'+InvoiceItem.cid+'"] input').length)时,我得到1,这表明元素存在。
我到底做错了什么?

ncgqoxb0

ncgqoxb01#

使用_.defer修复了我的问题:

var $this = this;
_.defer(function(){
  $this.$('tr[data-id="'+InvoiceItem.cid+'"] input').focus();
});
92vpleto

92vpleto2#

而不是this.$('tr[data-id="'+InvoiceItem.cid+'"] input').focus();
试试这个

$(view.render().el).find('input').focus();
35g0bw71

35g0bw713#

我遇到了一个和你的问题非常相似的问题,在寻找解决方案的过程中,我来到了这里。你的帖子是几个月前的,所以你可能已经跳过了这个问题,但是希望这能帮助其他人。我可以使用jQuery's ready function handler解决这个问题。我一直认为它只能在document上使用,但是你也可以在子节点上使用它。试试这个:

addOne: function(InvoiceItem) {
  var view = new InvoiceItemView({model: InvoiceItem});
  $('tr[data-id="'+InvoiceItem.get('after')+'"]').ready(function(){
    $('tr[data-id="'+InvoiceItem.cid+'"]').css('background', 'green');
    $('tr[data-id="'+InvoiceItem.cid+'"] input').focus();
  });
  $('tr[data-id="'+InvoiceItem.get('after')+'"]').after(view.render().el);

相关问题