如果您使用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,我发现如果事件已经用on()或live()应用了,那么元素没有缓存的事件数据,所以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/