代码之家  ›  专栏  ›  技术社区  ›  jAndy

jQuery.data()错误的类型?

  •  2
  • jAndy  · 技术社区  · 13 年前

    我在追踪我密码中的一个神秘问题。这个“错误”发生在 event handler 那是通过jQuery的 .delegate() :

    my.$table_body.delegate('.wf-dropdown', 'change', function(e){
        parent_row_element = $(e.target).closest('tr')[0];
    
        if( typeof $.data(parent_row_element, 'changed') == 'undefined' )
            $.data(parent_row_element, 'changed', {});
    
        $.data(parent_row_element, 'changed').wf_id = e.target.value;
        // .. more code
    }); 
    

    你不需要知道这些变量的定义和用途,神秘的事情发生在 undefined 价值。 很明显,我检查是否已经有一个对象附加到 parent_row_element 如果不是,就创造它。好像 typeof $.data(anything) 以一种我无法描述的方式失败。如果附加了像Firebug这样的调试器,它的计算结果是 未定义 正确,一切正常,没有调试器,分配给 .wf_id 总是抛出,因为对象未定义,因为它不是创建的。

    如果我用这句话,它会很好地工作:

    if(!$.data(parent_row_element, 'changed') )
        $.data(parent_row_element, 'changed', {});
    

    所以我猜这是个虫子。还是我忽略了什么?

    我可以重现这种行为:

    单击时引发错误,使用typeof
    http://www.jsfiddle.net/5cEVf/

    工作正常,没有类型
    http://www.jsfiddle.net/5cEVf/3/

    2 回复  |  直到 13 年前
        1
  •  3
  •   user113716    13 年前

    升级到1.4.2之后,它就被修复了。

    如果你提醒结果 typeof ,你得到 object 在1.4.2中。

        2
  •  1
  •   Gabriele Petrioli    13 年前

    问题是该值设置为null,而null是一个对象。

    所以 typeof 回报 'object' 这使得你 if 失败,并且由于对象为空,因此也无法分配新属性。