2016-01-23 53 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