2016-01-23 36 views
1

所以我在这里有这段代码。.focus()在悬停事件中不在textarea上工作

timeline.afterMilestonePrototypeCreated = function() { 
    $(MILESTONE_PROTOTYPE_SELECTOR).hover(function(e){ 
     $(this).find('textarea').focus(); 
    }); 
} 

应该在创建textarea元素后重点关注它。一切正常,我甚至在创建和悬停后检查事件是否被调用。其他代码都可以工作,但我无法专注于该textarea元素。一些谷歌搜索后,我试图添加一个setTimeout,这既不工作。

谢谢!

解决:

textarea的父元素是一个点,徘徊点后它成为一个更大的圆和比它的内元件变得可见。问题是,当添加超时时间,我设置的时间很短,所以让textarea可见的css过渡仍然是这样,它不是聚焦。

+0

你能显示你的HTML吗? 'console.log($(this).find('textarea')。length)'show? – Barmar

+0

它说“1”。动态添加的部分的html看起来像这样。

+0

它在这里工作:https://jsfiddle.net/barmar/mjof31vn/1/ – Barmar

回答

0

取而代之的是:

$(this).find('textarea').focus();

试试这个:

$(e.target).find('textarea').focus();

+0

没有,没有工作。 –

+0

在jQuery事件处理程序中,'this'是否总是与'e.target'相同? – Barmar

+0

@Barmar $(this)和event.target之间是有区别的。虽然this(或event.currentTarget,请参见下文)总是引用监听器所附的DOM元素,但event.target是实际被点击的DOM元素。 http://stackoverflow.com/a/21667010/1179430 – GAntoine

0

这可能工作,只要$(this).find('textarea')按预期工作:

timeline.afterMilestonePrototypeCreated = function() { 
    $(MILESTONE_PROTOTYPE_SELECTOR).hover(function(e){ 
     e.preventDefault(); 
     $(this).find('textarea').focus(); 
    }); 
} 

悬停事件触发a focus事件,因此防止它会允许手动focus发生。

+0

这也没有效果。也许这与隐藏textarea的可见性的css有关,一旦父元素不再被徘徊? –

+0

为什么悬停事件触发焦点事件?它把重点放在哪里? – Barmar

+0

@Barmar许多事件触发了一个焦点,包括点击和悬停,但我不知道为什么... – GAntoine