如果使用bind()
上改變事件它按預期工作,
似乎錯誤有關on()
方法,這就是爲什麼我不明白爲什麼最後一次所有使用.on()甚至對於單個元素!
http://jsfiddle.net/RbAua/9/
$('#wrap').on('keydown','#input',function(event){
if(event.keyCode == 8){ // backspace
if($(this).val().length == 0){
$(this).remove();
$('#txt').append('<div> removed! </div>');
event.preventDefault();
}
}
});
$('#wrap #input').bind('change', function(){
$('#txt').append('<div> changed! to [' + $(this).val() + '] </div>');
});
調試的jQuery,我發現,如果事件已應用於與()或生活(),那麼,元件沒有緩存的事件數據,所以CleanData()
不正常工作,在這種情況更令人奇怪的是,FF在預期範圍內運行正常。
我發現解決方法對於這個,想法是隻綁定到可見元素,所以在刪除之前使用 hide()將防止更改火災。
var onchange = function(e) {
$('#txt').append('<div> changed! to [' + $(this).val() + '] </div>');
};
$('#wrap').on('keydown', '#input', function(event) {
if (event.keyCode == 8) { // backspace
if ($(this).val().length === 0) {
var that = $(this);
var onchange1 = onchange;
that.hide();
that.remove();
$('#txt').append('<div> removed! </div>');
event.preventDefault();
}
}
});
$('#wrap').on('change', '#input:visible', onchange);
http://jsfiddle.net/RbAua/12/
你可以說這是否是一個錯誤或沒有,但我明白你的意思。當你刪除它失去焦點的元素,這就是觸發改變事件的原因。但是那個時候元素不再是DOM樹的一部分了。查找現有的Chrome bug報告,並創建自己的帳戶(如果不存在)。 –