"Cannot read property 'className' of null " - 一旦你滚动到 headers
"Cannot read property 'className' of null " - Once you scroll past the headers
重现问题。
转到:
http://taitems.github.io/jQuery.Gantt/
并将以下代码粘贴到控制台中。
$('.dataPanel').on('click', function(e) {
var elm = $(this);
$('.row.desc').children().filter(function() {
if ($(this).offset().top < e.pageY && ($(this).offset().top + 25) > e.pageY) {
console.log($(this).html());
}
});
$('.row.date').filter(function() {
if ($(this).offset().left < e.pageX && $(this).offset().left + 25 > e.pageX ) {
console.log($(this).html());
}
});
});
现在单击甘特图中的一些空白 space。控制台将输出被点击的日期和适当的描述。
一旦您向下滚动页面只是为了隐藏日期 headers 然后单击空白 space,就会出现问题
像这样
将抛出以下错误。
jquery.fn.gantt.js:386 Uncaught TypeError: Cannot read property 'className' of null
是什么原因造成的?
错误@ jquery.fn.gantt.js:386
已经在原始库中抛出,您的代码没有破坏它。该错误与 document.elementFromPoint 有关,看起来 lib 正在尝试获取 "outside the visible bounds of the document or either coordinate is negative" 所以 "the result [will be] null" 的元素。当脚本尝试读取此空值的 class 名称时抛出错误。
要修复库中的错误,我会尝试将第 384 行更改为 var col = core.elementFromPoint(e.pageX, e.pageY);
还有..
您可以通过取消绑定库事件侦听器来传递此错误,并且您的代码将不再抛出此错误。你应该能够简单地做到这一点:
$('.dataPanel').unbind('click').on('click', function(e) {
/* the rest of your code */
});
然后将不会打印任何错误,您的代码将 运行:
$('.dataPanel').unbind('click').on('click', function(e) {
var elm = $(this);
$('.row.desc').children().filter(function() {
if ($(this).offset().top < e.pageY && ($(this).offset().top + 25) > e.pageY) {
console.log($(this).html());
}
});
$('.row.date').filter(function() {
if ($(this).offset().left < e.pageX && $(this).offset().left + 25 > e.pageX ) {
console.log($(this).html());
}
});
});
[<div class="dataPanel" style="width: 8352px; margin-left: 0px; height: 312px;">…</div>]
Warranty Period
<div class="fn-label">14</div>
Showcasing
<div class="fn-label">6</div>
Development
<div class="fn-label">8</div>
Scoping
<div class="fn-label">9</div>
重现问题。
转到:
http://taitems.github.io/jQuery.Gantt/
并将以下代码粘贴到控制台中。
$('.dataPanel').on('click', function(e) {
var elm = $(this);
$('.row.desc').children().filter(function() {
if ($(this).offset().top < e.pageY && ($(this).offset().top + 25) > e.pageY) {
console.log($(this).html());
}
});
$('.row.date').filter(function() {
if ($(this).offset().left < e.pageX && $(this).offset().left + 25 > e.pageX ) {
console.log($(this).html());
}
});
});
现在单击甘特图中的一些空白 space。控制台将输出被点击的日期和适当的描述。
一旦您向下滚动页面只是为了隐藏日期 headers 然后单击空白 space,就会出现问题
像这样
将抛出以下错误。
jquery.fn.gantt.js:386 Uncaught TypeError: Cannot read property 'className' of null
是什么原因造成的?
错误@ jquery.fn.gantt.js:386
已经在原始库中抛出,您的代码没有破坏它。该错误与 document.elementFromPoint 有关,看起来 lib 正在尝试获取 "outside the visible bounds of the document or either coordinate is negative" 所以 "the result [will be] null" 的元素。当脚本尝试读取此空值的 class 名称时抛出错误。
要修复库中的错误,我会尝试将第 384 行更改为 var col = core.elementFromPoint(e.pageX, e.pageY);
还有..
您可以通过取消绑定库事件侦听器来传递此错误,并且您的代码将不再抛出此错误。你应该能够简单地做到这一点:
$('.dataPanel').unbind('click').on('click', function(e) {
/* the rest of your code */
});
然后将不会打印任何错误,您的代码将 运行:
$('.dataPanel').unbind('click').on('click', function(e) {
var elm = $(this);
$('.row.desc').children().filter(function() {
if ($(this).offset().top < e.pageY && ($(this).offset().top + 25) > e.pageY) {
console.log($(this).html());
}
});
$('.row.date').filter(function() {
if ($(this).offset().left < e.pageX && $(this).offset().left + 25 > e.pageX ) {
console.log($(this).html());
}
});
});
[<div class="dataPanel" style="width: 8352px; margin-left: 0px; height: 312px;">…</div>]
Warranty Period
<div class="fn-label">14</div>
Showcasing
<div class="fn-label">6</div>
Development
<div class="fn-label">8</div>
Scoping
<div class="fn-label">9</div>