2012-06-23 61 views
6

我用輸入字段創建了一個簡單的'無限'形式。 每當一個空輸入被聚焦時,它會創建一個新的輸入,並在空的輸入字段模糊時,該字段被刪除。在Chrome中觸發兩次jQuery blur事件

example here

我使用下面的代碼,以使這一切發生:

var $input = $('<div/>').html($('<input/>').addClass('value')); 
$('form').append($input.clone()); 

$('form').on('focus', 'input.value', function(e) { 

    // Add new input if the focused one is empty 
    if(!$.trim(this.value).length) { 
     $('form').append($input.clone()); 
    } 


}).on('blur', 'input.value', function(e) { 
    var $this = $(this); 

    if(!$.trim(this.value).length) { 
     console.log('REMOVING INPUT'); 
     $this.parent().remove(); 
    } else { 
     $this.attr('name', 'item-'+$this.val()); 
    } 

}); 

的問題然而,在Chrome時,我切換到另一個應用程序blur事件被觸發兩次(標籤)。這給出了一個錯誤,因爲它不可能刪除節點,因爲它已經消失了:

Uncaught Error: NOT_FOUND_ERR: DOM Exception 8 

Firefox似乎正常工作。

那麼爲什麼blur事件會發生兩次,我怎樣才能防止發生?

編輯 - 試過this question的答案,但沒有運氣。在Chrome中仍然收到錯誤消息,我做錯了什麼?

See updated fiddle

有沒有一種方法來檢查元素仍然存在?因爲第二次點擊blur節點被刪除。儘管如此,$(this).length仍然是非零的。

+2

重複http://stackoverflow.com/questions/9649966/chrome-maybe-safari-fires-blur-twice-on-input-fields-when-browser-loses-foc –

+0

是的我知道這看起來很熟悉: - ) – Pointy

+0

謝謝,愚蠢的我,搜索jQuery :(現在試試 – floorish

回答