IE8:无法删除'eq(...)。data(...);错误

时间:2013-06-14 20:39:26

标签: jquery binding internet-explorer-8

我们有一个庞大的系统,其中事件功能被绑定和解除绑定,有些是第三方库。我有一个选择器,我需要删除所有现有的绑定,然后再添加正确的绑定。 (我知道,这不是一个好的做法,但在这种情况下这是唯一的方法。)代码在IE8之外的任何地方都能正常工作,我得到错误“无法删除”eq(...)。data(... );“

这是代码;有没有办法在IE8中使这个工作?

   $('#reg-phone').keyup( function() { 
        if( typeof $('#reg-phone').eq(0).data('events') != 'undefined' ) {
            delete $('#reg-phone').eq(0).data('events');
        }
        $(this).data('placeholder', '');
        var tmp = $(this).val().replace(/(\d{3})(\d{3})(\d{4})/, '$1-$2-$3');
       $(this).val(tmp);
    });

2 个答案:

答案 0 :(得分:0)

代码对delete执行的操作不是一个好主意。要删除数据,您应该使用removeData代替:

$('#reg-phone').eq(0).removeData('events');

但这里还有其他一些奇怪的东西:

  • .eq(0)是什么?您正在使用id选择器,因此您最多只能获得一个元素。
  • 为什么不直接使用.off删除事件处理程序和数据?

答案 1 :(得分:0)

   $('#reg-phone').keyup( function() { 
        $('#reg-phone').off();
        $(this).data('placeholder', '');
        var tmp = $(this).val().replace(/(\d{3})(\d{3})(\d{4})/, '$1-$2-$3');
       $(this).val(tmp);
    });