2010-10-11 72 views
0

不确定性崩溃在我的web应用程序,我用按Ctrl +箭头键从细胞定位到单元格在一个表中。我的web应用程序的谷歌浏览器

所有单元格都包含可见的<span>和隐藏的<input>元素 - 它们的值保持同步。

当单元格被激活时,隐藏<span>,同时显示输入。

一切工作只是罚款的Firefox,IE,Opera等。然而当我加载浏览器,使用按Ctrl +按Ctrl +右键崩溃页面(我看到了“Aw Snap”页面)。奇怪的是,Ctrl + 向上Ctrl + 向下工作。

我已经确定的是,下面的代码是(直接或间接负责的崩溃):

/** 
* Deactivates a cell, hiding its input field, and showing its span field 
*/ 
View.prototype.deactivateCell = function (cell){ 
//Show the span, hide the input 
var label = cell.descendants()[0]; 
var input = cell.descendants()[1]; 
if(label){ 
    label.show(); 
} 
if(input){ 
    //THIS NEXT LINE IN PARTICULAR CAUSES THE CRASH 
    //I've also tried input.style.display = "none"; - same result 
    input.hide(); 
} 
} 

奇怪的是,这个码是按Ctrl称为 + 向上/ ,以及按Ctrl +/ - 但它只是崩溃的/ - 即使具有相同的cell值!

所有这些细胞都有两个,也只有两个,后代...而且崩溃与源细胞或目标细胞无关 - 可以从上方移入任何细胞,但不能从左边。

更奇怪的是什么;在deactivateCell(cell)方法的末尾添加alert(1);可防止崩溃。把它放在方法的开始没有任何影响(其他然后显示警告对话,在崩溃之前)

我试着在测试文件中隔离相关的HTML +此方法 - 我无法重现崩溃。

有没有人遇到过这个?我应该把它写成浏览器错误吗?有谁知道我可能会如何调试,或尝试修复它?我没有那么模糊的印象,我的Javascript如何能够让浏览器头顶,当许多其他网站都很好时。

+0

你能否在另一台机器上确认这一点? – 2010-10-11 10:33:43

+0

是的 - 我的桌面和我的笔记本电脑。 Chrome的两个版本都应该是最新的 - 它会在后台更新自己,不是吗? – Vladislav 2010-10-11 10:34:32

+0

@Vladislav你可以'输入'转储到控制台?它总是保证真的是一个输入字段?是否有一些与输入元素相关的HTML进行并发更新? – 2010-10-11 10:38:37

回答

1

我不是原型英雄,但我注意到,你调用cell.descendants()而不检查单元格是否为空。

另外,你是否隐藏光标所在的当前输入?如果是这样,请在隐藏当前的输入之前尝试focus()到不同的输入。

+0

'cell'在调用方法中测试为非空时非常重要,但是,谢谢 - 这是一个很好的做法。我也尝试转移焦点 - 无济于事。 – Vladislav 2010-10-11 10:50:25

相关问题