我正在跟踪我的代码中的一个神秘问题。这个“错误”情况,其通过jQuery的.delegate()
结合的event handler
内:typeof jQuery.data()越野车?
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这样的调试器,则它的计算结果为undefined
,并且一切工作正常,没有调试器,因为对象未定义,所以始终抛出.wf_id
,因为它没有创建。
它完美,如果我用这个语句:
if(!$.data(parent_row_element, 'changed'))
$.data(parent_row_element, 'changed', {});
这就是为什么我想,这是一个错误。还是我忽略了一些东西?
我能重现此问题:
抛出上点击了错误的typeof用于
http://www.jsfiddle.net/5cEVf/
工作正常,没有typeof运算
http://www.jsfiddle.net/5cEVf/3/
你在这里使用'=='而不是'==='使用可怕的领域。 (噢等待它的“typeof”结果 - 没关系) – Pointy 2010-11-22 13:37:43
@Pointy:我不这么认为?在调试模式下,'=='不应该成为一个问题,无论如何'=='和'==='评估为'true'。 – jAndy 2010-11-22 13:40:01
为什么不''警告'typeof'的结果,所以你可以看到没有使用调试器会发生什么。 – 2010-11-22 13:40:10