2010-12-22 61 views
1

我試圖改變輸入元素的類,當它失去焦點。這個項目的前提是允許用戶雙擊一些文本,然後編輯該文本。然後,當他們失去對該領域的專注時,它應該看起來不像表格的一部分。聚焦或模糊類元素

我的問題就出在這裏:

$('.actdblclk').dblclick(function(){ 

    $(this).removeClass('actdblclk').addClass('actdblclk_active').focus(); 

}); 

$('.actdblclk_active').focusout(function(){ 
    alert(); 

    $(this).removeClass('actdblclk_active').addClass('actdblclk'); 
}); 

我獲得焦點的輸入欄時,我雙擊,但是當我點擊關閉時,事件的內容不會觸發事件。

這裏是整個小提琴http://www.jsfiddle.net/t8JsG/

回答

3

該事件的內容()事件處理不火,因爲目前它被分配有一類.actdblclk_active沒有元素。

你應該分配內部DBLCLICK(一事件的內容()處理),像這樣:

$('.actdblclk').dblclick(function(){ 
    $(this).removeClass('actdblclk').addClass('actdblclk_active').focus(); 
    $(this).focusout(function(){ 
    alert(); 

    $(this).removeClass('actdblclk_active').addClass('actdblclk').unbind('focusout'); 

    }) 
}); 

更新:第二個選項是使用jQuery.live()指定事件的內容()處理,就像這樣:

$('.actdblclk_active').live('focusout', function(
    alert(); 
    $(this).removeClass('actdblclk_active').addClass('actdblclk');) 
}); 

這樣,這個處理器將被分配到當前和.actdblclk_active選擇器匹配的任何未來元素

+0

你的第一個解決方案將每一個有元素上雙擊時間增加一個`focusout`處理。 – user113716 2010-12-22 23:17:22

3

你可以將處理程序添加爲實時事件處理程序。這樣,活動處理程序總是在匹配選擇器內查找事件。

$('.actdblclk').dblclick(function(){ 

    $(this).removeClass('actdblclk').addClass('actdblclk_active').focus(); 

}); 

$('.actdblclk_active').live('focusout', function(){ 
    $(this).removeClass('actdblclk_active').addClass('actdblclk'); 
}); 
1

當頁面加載時,頁面上沒有類actdblclk_active的元素。

你應該使用原來的類分配focusout處理程序:

$('.actdblclk').dblclick(function(){  
    $(this).removeClass('actdblclk').addClass('actdblclk_active').focus(); 
}).focusout(function(){ 
    $(this).removeClass('actdblclk_active').addClass('actdblclk'); 
});